dubbo 基于springboot入门
dubbo也是RPC框架,它的概念是通过网络来进行通讯。
通过实践,个人对dubbo的感受为没有spring cloud那么多组建,只有服务注册中心,服务提供者和服务消费者,以及现场的监控服务的admin管理页面。
主体的架构图如下:
而且踩了很多坑,比如版本问题,大家要注意以下。
https://blog.csdn.net/gaopeng0071/article/details/81869878
我遇到的问题是:服务提供者老是注册不到服务注册中心,我使用的是在启动类上添加@EnableDubboConfiguration
然后再mvn clean,mvn install 缺啥jar再导入,最后搞定的。
接下来先实现下dubbo admin监控组件,
我是直接再网上下载dubbo-admin.war然后放到tomcat webapps里面进行运行,由于在dubbo源码下载下来老是有些jar导入不了,想省事的可以再下面这里下载。
百度云盘:链接: https://pan.baidu.com/s/15qzhmdL1EvCj8T5Hjp\_VZg 提取码: cyhn
tomcat启动之后,浏览器输入http://localhost:8080/dubbo-admin-2.6/,账号密码都是root
dubbo 服务提供者
pom.xml导入jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我把完整的都贴出来,很多入门博客都是没有贴完整的maven jar代码的,有时一直版本不对或者导入少了,为啥有些不需要里面的zkclient呢,可能是dubbo版本问题吧,具体不了解。
实现接口
import com.example.demo.User;
public interface UserService {
public User getUser();
}
dubbo也是通过接口监听来调用服务的。
接口实现
import com.alibaba.dubbo.config.annotation.Service;
import com.example.demo.User;
import org.springframework.stereotype.Component;
import java.util.UUID;
@Component
@Service(version = "1.0.0",timeout = 10000,interfaceClass = UserService.class)
public class UserServiceImpl implements UserService {
@Override
public User getUser() {
User user=new User();
user.setId(UUID.randomUUID().toString());
user.setName("dajitui");
return user;
}
}
@Service注解很重要,让dubbo扫描的时候可以发现。
配置文件
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.registry.check=false
spring.dubbo.protocol.port=20880
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.host=127.0.0.1
spring.dubbo.scan.base-packages=com.example.demo.service
server.port=8082
!!!注意提前开启zookeeper
.这里还有一个坑,这个要看你导入的dubbo jar是哪个,有些是上面spring.dubbo开头,有些是dubbo.开头的。
在启动类添加@EnableDubboConfiguration注解
服务消费者
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件
## 避免和 server 工程端口冲突
server.port=8081
## Dubbo 服务消费者配置
dubbo.application.name=consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.check=false
dubbo.scan.base-packages=com.example.demo.service
dubbo.protocol.host=127.0.0.1
dubbo.consumer.check=false
同样要有一个UserService接口
编写一个控制类
@RestController
public class UserController {
@Reference(version = "1.0.0")
UserService userService;
@RequestMapping("/save")
public Object saveUser() {
return userService.getUser();
}
}
@Reference其实是去zookeeper中查找是不是有这个的服务提供者
正常启动即可。访问localhost:8081/save即可看到
项目地址:https://github.com/dajitui/dubbo-test
还没有评论,来说两句吧...