spring boot整合dubbo+zookeeper
下文将简述springboot整合dubbo+zookeeper实现api+provider+consumer模式,api用于定于interface,provider和consumer依赖api,provider实现api接口,consumer调用provider。
spring boot版本:3.5.3
jdk版本:java17
1.创建父工程
此处只勾选了spring web和lombok,需要orm框架自行增加
2.父工程引入依赖
父工程pom.xml,引入dubbo和zookeeper相关依赖,修改packaging为pom不打包,并删除src目录
<dependency> <groupid>org.apache.dubbo</groupid> <artifactid>dubbo-spring-boot-starter</artifactid> <version>3.2.10</version> </dependency> <!-- zookeeper客户端 --> <dependency> <groupid>org.apache.curator</groupid> <artifactid>curator-recipes</artifactid> <version>5.2.0</version> </dependency> <dependency> <groupid>org.apache.curator</groupid> <artifactid>curator-framework</artifactid> <version>5.2.0</version> </dependency> <dependency> <groupid>org.apache.curator</groupid> <artifactid>curator-x-discovery</artifactid> <version>5.2.0</version> <!-- 与zookeeper版本匹配 --> </dependency> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-dependencies</artifactid> <version>3.5.3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencymanagement>
3.创建api子模块
(1).新建dubbo-api module
(2).修改pom.xml文件
修改dubbo-api的pom.xml,parent修改为刚才新建的groupid、artifactid和version,再去掉重复的配置
<parent> <groupid>com.example</groupid> <artifactid>dubbodemo</artifactid> <version>0.0.1-snapshot</version> </parent>
父工程pom.xml增加子模块
<modules> <module>dubbo-api</module> </modules>
( 3).修改配置
修改application.properties为application.yml,并增加dubbo配置内容
spring: application: name: dubbo-api config: activate: on-profile: default server: port: 8080 dubbo: application: name: dubbo-api protocol: name: dubbo port: 20880 registry: address: zookeeper://192.168.48.154:2181
dubbo.protocol 此处协议不是自定义的,自由dubbo、rpc等类型
registry:配置zookeeper地址
(4)启动类,开启dubbo,
@enabledubbo 注解用于开启dubbo客户端,scanbasepackages 可以配置包路径
@springbootapplication @enabledubbo public class dubboapiapplication{ public static void main(string[] args) { springapplication.run(dubboproviderapplication.class, args); } }
(5)新增service接口
public interface testservice { string sayhello(string name); }
4.创建provider子模块
(1)创建dubbo-provider模块,和上面一样,就不赘述了
(2)修改pom.xml文件
依赖中加入api模块的依赖
<dependencies> <dependency> <groupid>com.example</groupid> <artifactid>dubbo-api</artifactid> <version>0.0.1-snapshot</version> </dependency> </dependencies>
(3)修改配置文件
application.yml
spring: application: name: provider config: activate: on-profile: default server: port: 8081 dubbo: application: name: dubbo-provider qos-enable: true qos-port: 22223 registry: address: zookeeper://192.168.48.154:2181 protocol: name: dubbo port: 20881 #同一台机器不能相同
对比api模块增加了qos-enable和qos-port两个属性,qos是dubbo提供的运维和管理功能,表示开启;qos-port表示运维管理功能的端口
(4)启动类,开启dubbo,
@enabledubbo 注解用于开启dubbo客户端,scanbasepackages 可以配置包路径
@springbootapplication @enabledubbo public class dubboproviderapplication { public static void main(string[] args) { system.setproperty("zookeeper.sasl.client", "false"); springapplication.run(dubboproviderapplication.class, args); } }
(5)实现testservice接口
package com.examplexu.dubboprovider.service; import com.examplexu.duubo.service.testservice; import org.apache.dubbo.config.annotation.dubboservice; @dubboservice(version = "1.0.0") public class testserviceimpl implements testservice { @override public string sayhello(string name) { return "welcome"+name+" to dubbo!"; } }
@dubboservice 的作用为标记testservice为服务提供者,暴露为dubbo服务,并注册到zookeeper并进行管理。可以配置的参数如下:
version: 服务版本号(必填)
timeout: 调用超时时间(毫秒)
loadbalance: 负载均衡策略
retries: 失败重试次数
check: 启动时检查依赖服务是否可用
5.创建consumer子模块
(1)创建dubbo-consumer模块,和上面一样,就不赘述了
(2)修改pom.xml文件
依赖中加入api模块的依赖
<dependencies> <dependency> <groupid>com.example</groupid> <artifactid>dubbo-api</artifactid> <version>0.0.1-snapshot</version> </dependency> </dependencies>
(3)修改配置文件
spring: application: name: consumer config: activate: on-profile: default server: port: 8084 dubbo: config: application: name: dubbo-consumer qos-enable: true qos-port: 22224 registry: address: zookeeper://192.168.48.154:2181 timeout: 20000 protocol: name: dubbo port: 20882 config-center: timeout: 20000
此处增加了超时时间,注册中心如果超时,会抛出异常,若配置了重试会进行重试操作;配置中心超时,会记录警告日志,可能会影响动态配置更新
(5)启动类,开启dubbo
@springbootapplication @enabledubbo public class dubboconsumerapplication { public static void main(string[] args) { system.setproperty("zookeeper.sasl.client", "false"); springapplication.run(dubboconsumerapplication.class, args); } }
(6)增加controller调用provider
@restcontroller @requestmapping("/consumer") public class testcontroller { @dubboreference(version = "1.0.0",timeout = 5000,loadbalance = "roundrobin",retries = 3,check = false) private testservice testservice; @getmapping("/sayhello") public string test(string name) { return testservice.sayhello(name); } }
@dubboreference 用于标记引用dubbo服务,自动从注册中心发现并创建服务代理,实现服务的远程调用。主要配置参数如下:
version 版本号,与服务提供者提供的version一直
timeout 单次调用超时时间
loadbalance 负载均衡策略有random/roundrobin/leastactive策略,即随机、轮询、近期最少使用
retries 失败自动重试次数
check 启动时是否检查依赖服务的可用性
6.启动服务
依次启动dubbo-api、dubbo-provider、dubbo-consumer;启动时可以查看日志会出现很多zookeeper和dubbo的日志
启动过程中如果报错:
2025-07-10t15:28:14.979+08:00 error 37840 --- [consumer] [ main] o.a.d.c.deploy.defaultmoduledeployer : [dubbo] model reference failed: dubbo module[1.1.1] , catch error : can not create registry service-discovery-registry://192.168.48.154:2181/org.apache.dubbo.registry.registryservice?application=dubbo-consumer&dubbo=2.0.2&executor-management-mode=isolation&file-cache=true&interface=org.apache.dubbo.registry.registryservice&pid=37840&qos.enable=true&qos.port=22224®istry=zookeeper&release=3.2.10&timeout=20000, dubbo version: 3.2.10, current host: 192.168.1.93, error code: 5-15. this may be caused by , go to https://dubbo.apache.org/faq/5/15 to find instructions. java.lang.runtimeexception: can not create registry service-discovery-registry://192.168.48.154:2181/org.apache.dubbo.registry.registryservice?application=dubbo-consumer&dubbo=2.0.2&executor-management-mode=isolation&file-cache=true&interface=org.apache.dubbo.registry.registryservice&pid=37840&qos.enable=true&qos.port=22224®istry=zookeeper&release=3.2.10&timeout=20000 at org.apache.dubbo.registry.support.abstractregistryfactory.getregistry(abstractregistryfactory.java:105) ~[dubbo-3.2.10.jar:3.2.10] at org.apache.dubbo.registry.registryfactorywrapper.getregistry(registryfactorywrapper.java:33) ~[dubbo-3.2.10.jar:3.2.10]
启动类中新增:
system.setproperty("zookeeper.sasl.client", "false");
表示不进行sasl认证,生产环境视要求具体设置
测试结果
当dubbo-api、dubbo-provider和dubbo-consumer都启动完成后,使用消费者接口访问。
可以发现此处消费者调用的是提供者的实现内容。
到此这篇关于spring boot整合dubbo+zookeeper的文章就介绍到这了,更多相关spring boot整合dubbo+zookeeper内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论