当前位置: 首页 > java >正文

Spring boot整合dubbo+zookeeper

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-apiconfig:activate:on-profile: default
server:port: 8080
dubbo:application:name: dubbo-apiprotocol:name: dubboport: 20880registry: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: providerconfig:activate:on-profile: default
server:port: 8081
dubbo:application:name: dubbo-providerqos-enable: trueqos-port: 22223registry:address: zookeeper://192.168.48.154:2181protocol:name: dubboport: 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 {@Overridepublic 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: consumerconfig:activate:on-profile: default
server:port: 8084
dubbo:config:application:name: dubbo-consumerqos-enable: trueqos-port: 22224registry:address: zookeeper://192.168.48.154:2181timeout: 20000protocol:name: dubboport: 20882config-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&registry=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&registry=zookeeper&release=3.2.10&timeout=20000at 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都启动完成后,使用消费者接口访问。
在这里插入图片描述
可以发现此处消费者调用的是提供者的实现内容。

http://www.xdnf.cn/news/15000.html

相关文章:

  • 《O-PAS™标准的安全方法》白皮书:为工业自动化系统筑起安全防线
  • Spring核心原理的快速入门:快速了解IoC与DI
  • [实战]调频(FM)和调幅(AM)信号生成(完整C语言实现)
  • 【C++】红黑树的底层思想 and 大厂面试常问
  • selenium跳转到新页面时如何进行定位
  • 【K8S】Kubernetes 使用 Ingress-Nginx 基于 Cookie 实现会话保持的负载均衡
  • 【前端】接口日志追踪
  • OKR工作法
  • x86汇编语言入门基础(三)汇编指令篇3 位移运算
  • Matplotlib-绘制训练曲线指南
  • defer学习指南
  • 黑搜小知识 | DNS域名解析过程是什么样的?
  • 【Modern C++ Part8】Prefer-nullptr-to-0-and-NULL
  • 深度学习12(卷积神经网络)
  • Token 和 Embedding的关系
  • 模型内部进行特征提取时,除了“减法”之外,还有哪些技术
  • SpringCloud系列 - xxl-job 分布式任务调度 (七)
  • Using Spring for Apache Pulsar:Publishing and Consuming Partitioned Topics
  • swiglu 激活函数学习笔记
  • Rust与Cypress应用
  • 技术支持丨解决 ServBay 在 Windows 启动时反复提示安装 .NET 的问题
  • Flask3.1打造极简CMS系统
  • leetcode11.盛最多水的容器
  • 微信小程序91~100
  • STM32-待机唤醒实验
  • 搭建一款结合传统黄历功能的日历小程序
  • S7-200 SMART :通过以太网下载程序详细步骤
  • ServBay Windows 1.2.0 更新!新增 PHP 设置与 Ollama 支持
  • Docker 高级管理 -- 容器通信技术与数据持久化
  • 人工智能-基础篇-27-模型上下文协议--MCP到底怎么理解?对比HTTP的区别?