springboot整合dubbo,用zookeeper做通信。具体步骤如下:
步骤一:zookeeper环境
1、进入官网下载zookeeper安装包
地址:https://zookeeper.apache.org/releases.html
2、解压安装包,并找到解压后的 conf 文件夹。
复制zoo_sample.cfg 名字为zoo.cfg
修改zoo.cfg 的dataDir路径,并增加dataLogDir 。改成自己需要的路径即可
3、点击bin目录下的 zkServer.cmd 启动zookeeper
步骤二:服务环境
1、搭建父子项目
搭建maven项目或者springboot项目,配置文件改成如下所示,并引入dubbo的配置:
不用配置打包信息,否则子项目都会集成。
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
</parent>
<groupId>com.xiang</groupId>
<artifactId>dubbo-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>dubbo-api</module>
<module>dubbo-provider</module>
<module>dubbo-consumer</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<springboot-version>2.4.3</springboot-version>
<dubbo-version>2.7.8</dubbo-version>
<curator-version>2.8.0</curator-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot-version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo-version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator-version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
2、搭建公共子模块(dubbo-api)
创建子模块,这里只提供接口,之后会有provider去实现这个接口中的方法。
创建 service包,写UserService接口,并提供方法,代码如下:
public interface UserService {
Integer getCount();
}
pom配置文件如下:
<parent>
<artifactId>dubbo-parent</artifactId>
<groupId>com.xiang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-api</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo-version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator-version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator-version}</version>
</dependency>
</dependencies>
3、搭建生产者(dubbo-provider)
生产者是提供方法者,这个模块会引用dubbo-api模块并实现其提供的功能(maven引入)。
代码如下: 使用了DubboService注解
@DubboService
public class UserServiceImpl implements UserService {
@Override
public Integer getCount() {
return 22;
}
}
properties配置如下:
server.port=1001
dubbo.application.name=DUBBO-PROVIDER
#协议名称
dubbo.protocol.name=dubbo
#协议端口
dubbo.protocol.port=20880
#注册地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
#服务类包目录
dubbo.scan.base-packages=com.xiang.dubbo.service.impl
其中dubbo.scan.base-packages 是扫描包使用的。在生产者中主要扫描是否有 @DubboService 注解。在消费者中,主要扫描是否有 @DubboReference 注解。
指定扫描包的位置总共有三种方式:
a.dubbo.scan.base-packages =“xxx” 配置文件配置
b.@EnableDubbo
也是启动dubbo,如果使用的是这个注解,dubbo会扫描当前注解所在包以及以下的包。
c.@DubboComponentScan("xxx")
该注解中与配置文件注解一致,都会扫描该项目下指定的文件路径。
pom配置如下:
<parent>
<artifactId>dubbo-parent</artifactId>
<groupId>com.xiang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-provider</artifactId>
<dependencies>
<dependency>
<groupId>com.xiang</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
打包配置,可按需修改:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId> <!--打包插件-->
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork><!-- 如果没有该配置,devtools不会生效 -->
<mainClass>com.xiang.dubbo.DubboProviderApplication</mainClass><!-- 指定该Main Class为全局的唯一入口 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!--可以把依赖的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
<!--在这里修改版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<!---->
</plugins>
<finalName>dubbo-provider</finalName>
</build>
4、搭建消费者(dubbo-consumer)
消费者是使用生产者提供的功能,这个模块会引用dubbo-api模块并实现其提供的功能(maven引入)。
代码如下:主要使用了@DubboReference 注解
@RestController
public class UserController {
@DubboReference
private UserService userService;
@RequestMapping("getCount")
public Integer getCount() {
return userService.getCount();
}
}
properties配置文件:
server.port=1002
dubbo.application.name=DUBBO-CONSUMER
#协议名称
dubbo.protocol.name=dubbo
#协议端口
dubbo.protocol.port=20880
#注册地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
#服务类包目录
dubbo.scan.base-packages=com.xiang.dubbo.controller
pom配置文件代码与provider一致。
5、测试
启动zookeeper
启动生产者
启动消费者
浏览器中输入:http://localhost:1002/getCount 得到正常结果。
补充:
可以下载zookeeper连接客户端(ZooInspector),查看zookeeper的生产消费信息