Spring?boot整合dubbo+zookeeper的詳細過程
Spring boot整合dubbo+zookeeper
下文將簡述springboot整合dubbo+zookeeper實現(xiàn)api+provider+consumer模式,Api用于定于interface,provider和consumer依賴Api,provider實現(xiàn)api接口,consumer調(diào)用provider。
spring boot版本:3.5.3
jdk版本:java17
1.創(chuàng)建父工程
此處只勾選了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.創(chuàng)建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配置內(nèi)容
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:2181dubbo.protocol 此處協(xié)議不是自定義的,自由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.創(chuàng)建provider子模塊
(1)創(chuàng)建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)實現(xiàn)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并進行管理??梢耘渲玫膮?shù)如下:
version: 服務版本號(必填)
timeout: 調(diào)用超時時間(毫秒)
loadbalance: 負載均衡策略
retries: 失敗重試次數(shù)
check: 啟動時檢查依賴服務是否可用
5.創(chuàng)建consumer子模塊
(1)創(chuàng)建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此處增加了超時時間,注冊中心如果超時,會拋出異常,若配置了重試會進行重試操作;配置中心超時,會記錄警告日志,可能會影響動態(tài)配置更新
(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調(diào)用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服務,自動從注冊中心發(fā)現(xiàn)并創(chuàng)建服務代理,實現(xiàn)服務的遠程調(diào)用。主要配置參數(shù)如下:
version 版本號,與服務提供者提供的version一直
timeout 單次調(diào)用超時時間
loadbalance 負載均衡策略有random/roundrobin/leastactive策略,即隨機、輪詢、近期最少使用
retries 失敗自動重試次數(shù)
check 啟動時是否檢查依賴服務的可用性
6.啟動服務
依次啟動dubbo-api、dubbo-provider、dubbo-consumer;啟動時可以查看日志會出現(xiàn)很多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認證,生產(chǎn)環(huán)境視要求具體設置
測試結果
當dubbo-api、dubbo-provider和dubbo-consumer都啟動完成后,使用消費者接口訪問。

可以發(fā)現(xiàn)此處消費者調(diào)用的是提供者的實現(xiàn)內(nèi)容。
到此這篇關于Spring boot整合dubbo+zookeeper的文章就介紹到這了,更多相關Spring boot整合dubbo+zookeeper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- SpringBoot整合Dubbo+Zookeeper實現(xiàn)RPC調(diào)用
- SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應用詳解
- SpringBoot中dubbo+zookeeper實現(xiàn)分布式開發(fā)的應用詳解
- 2020最新IDEA SpringBoot整合Dubbo的實現(xiàn)(zookeeper版)
- SpringBoot系列教程之dubbo和Zookeeper集成方法
- SpringBoot整合Dubbo zookeeper過程解析
- 使用dubbo+zookeeper+spring boot構建服務的方法詳解
- Springboot 整合 Dubbo/ZooKeeper 實現(xiàn) SOA 案例解析
相關文章
Springboot使用redis實現(xiàn)接口Api限流的實例
本文介紹的內(nèi)容如題,就是利用redis實現(xiàn)接口的限流(某時間范圍內(nèi),最大的訪問次數(shù)),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07
啟動springboot應用因未配置數(shù)據(jù)庫報錯的解決方案
這篇文章主要介紹了啟動springboot應用因未配置數(shù)據(jù)庫報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Spring中@PostConstruct的實現(xiàn)方法
大多數(shù)java程序員都使用過@PostConstruct注解,它的作用就是在Bean初始化完成后執(zhí)行,相當于我們常說的init()方法,但是我們看@PostConstruct只有單單的一個注解,它到底是如何實現(xiàn)在Bean初始化完成后就被調(diào)用的呢,本文將詳細給大家介紹一下2023-06-06
springboot themaleaf 第一次進頁面不加載css的問題
這篇文章主要介紹了springboot themaleaf 第一次進頁面不加載css的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
基于springboot的flowable工作流實戰(zhàn)流程分析
這篇文章主要介紹了基于springboot的flowable工作流實戰(zhàn)流程分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10
新的Java訪問mysql數(shù)據(jù)庫工具類的操作代碼
本文通過實例代碼給大家介紹新的Java訪問mysql數(shù)據(jù)庫工具類的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-12-12
java中BCryptPasswordEncoder密碼的加密與驗證方式
這篇文章主要介紹了java中BCryptPasswordEncoder密碼的加密與驗證方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08

