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.pswp.cn/web/88990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88990.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found

簡介&#xff1a;在復現 VLM-R1 項目并嘗試將其中的 GRPO 算法應用到自己的任務時&#xff0c;按照官方文檔配置好環境后&#xff0c;運行過程中遇到了一個非常離譜的錯誤&#xff1a; ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32 not found 這個問題極…

基于Spring Boot的生活用品電商網站的設計與實現

第1章 摘要隨著電商行業的飛速發展&#xff0c;生活用品電商網站作為線上購物的一部分&#xff0c;逐漸成為消費者日常購物的重要渠道。為提升網站的管理效率和用戶體驗&#xff0c;設計并實現了一款基于Spring Boot的生活用品電商網站。該系統通過合理的架構設計&#xff0c;提…

數據結構 單鏈表(1)

1.概念和結構概念&#xff1a;鏈表是一種物理存儲結構上非連續、非順序的存儲結構&#xff0c;數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。通過指針鏈接次序實現的要怎么理解呢?這是一張鏈表的結構圖:與順序表不同的是&#xff0c;鏈表里的每節“車廂” (仔細觀察這…

Python爬蟲實戰:研究PyMongo庫相關技術

1. 引言 在當今信息爆炸的時代,互聯網上存在著海量的有價值數據。如何高效地獲取這些數據并進行存儲和分析,成為了數據科學領域的重要研究方向。網絡爬蟲作為一種自動化的數據采集工具,可以幫助我們從網頁中提取所需的信息。而 MongoDB 作為一種流行的 NoSQL 數據庫,能夠靈…

【世紀龍科技】邁騰B8汽車整車檢測與診斷仿真實訓系統

在汽車技術日新月異的今天&#xff0c;如何培養既懂理論又精實踐的高素質汽修人才&#xff0c;成為職業教育領域亟待突破的課題。江蘇世紀龍科技憑借深厚的技術積淀與教育洞察&#xff0c;重磅推出《汽車整車檢測與診斷仿真實訓系統》&#xff0c;以邁騰B8為原型&#xff0c;通…

.net服務器Kestrel配置Nginx作為反向代理

.NET服務器Kestrel配置Nginx作為反向代理 在ASP.NET Core應用程序的部署過程中&#xff0c;Kestrel是一款輕量級的跨平臺Web服務器。不過&#xff0c;直接將其暴露在互聯網上并非明智之舉。為了增強安全性、提升性能以及提高可伸縮性&#xff0c;我們可以借助Nginx作為反向代理…

MyBatis 在執行 SQL 時找不到名為 name 的參數

MyBatis 在執行 SQL 時找不到名為 name 的參數&#xff0c;因為當接口方法有多個參數時&#xff0c;沒有使用 Param(“name”) 明確指定參數名。 其他人說只有springboot1.x的版本才會出現該問題&#xff0c;但是我在使用2.x的版本時也出現了該問題Not found 參數 于是便回根溯…

【Git】git的回退功能

Git 的回退功能非常強大&#xff0c;但因為有多個命令&#xff0c;初學者很容易混淆。我們來系統地梳理一下最核心的幾個“回退”指令&#xff1a;git reset、git revert 和 git restore。 我會按照使用場景和安全級別來為你講解。核心區別&#xff1a;reset vs revert 這是最重…

STM32新建工程

1、新建工程 Keil5中&#xff0c;新建Project&#xff0c;選擇STM32Project文件夾&#xff0c;在此文件夾下新建一個文件夾“STM32工程模板”&#xff0c;然后給工程文件起名字“Project”選擇器件型號 2、添加啟動文件 新建start文件夾復制啟動文件&#xff1a;固件庫文件夾……

網絡傳輸過程

https傳輸過程客戶端發起HTTPS請求操作&#xff1a;用戶在瀏覽器輸入 https://www.example.com 技術細節&#xff1a; 客戶端向服務器443端口發起TCP連接 發送Client Hello消息&#xff08;包含支持的TLS版本、加密套件、客戶端隨機數&#xff09; 安全意義&#xff1a;建立安全…

【LeetCode 3440. 重新安排會議得到最多空余時間 II】解析

目錄LeetCode中國站原文原始題目題目描述示例1&#xff1a;示例2&#xff1a;示例3&#xff1a;示例4&#xff1a;講解1. 新規則&#xff0c;新挑戰2. 收益從何而來&#xff1f;兩種可能性的誕生3. 我們的終極策略4. 當策略被壓縮到極致第一次遍歷&#xff1a;從左到右&#xf…

C++卸載了會影響電腦正常使用嗎?解析C++運行庫的作用與卸載后果

卸載C運行庫可能導致常用軟件癱瘓&#xff01;這些不起眼的組件為Photoshop、游戲等提供關鍵支持&#xff0c;多個版本共存是正常現象&#xff0c;隨意清理會引發程序報錯甚至閃退。一、前言&#xff1a;C不是“編程語言”那么簡單很多用戶在電腦中看到“Microsoft Visual C Re…

前端vue對接海康攝像頭流程

1、拆包攝像頭、插電源2、下載SADP&#xff08;設備網絡搜索&#xff09;&#xff0c;連接設備&#xff0c;獲取ip地址 下載地址&#xff1a;https://partners.hikvision.com/tools 找到自己的設備類型DS開頭3、攝像頭鏈接wifi、網線 登錄設備預覽配置網頁-配置網絡-可預覽等 4…

org.casic.javafx.control.PaginationPicker用法

org.casic.javafx.control.PaginationPicker 是 CASIC&#xff08;或某位作者&#xff09;基于 JavaFX 自制的分頁控件&#xff0c;功能比官方 Pagination 更完整&#xff0c;支持&#xff1a;首頁 / 上一頁 / 下一頁 / 尾頁按鈕頁碼快速跳轉每頁條數自定義總數據量、當前頁碼、…

下載 | Win10 2021精簡版,預裝應用極少!(7月更新、Win 10 IoT LTSC 2021版、適合老電腦安裝)

? 【資源A047】Win10 IoT LTSC 2021精簡版 &#x1f536;Windows 10 IoT 企業版 LTSC 2021 正式版更新中。LTSC是長期服務渠道版本&#xff0c;網友俗稱“老壇酸菜版”&#xff0c;相當于精簡版Win10&#xff0c;精簡了很多預裝應用&#xff0c;同時更新頻率也更低&#xff0c…

Web3:Foundry使用指南

Foundry目錄1. 前言2. 什么是Foundry3. 安裝與環境配置1. 安裝工具2. 重新加載 .bashrc3. 檢查環境變量 PATH4. 手動運行 foundryup4. Foundry的基本使用1.創建一個新的Foundry項目2. 編寫智能合約3. 編譯智能合約4. foundry.toml 主要作用5.部署智能合約5. Cli參考1. forge2. …

uniapp+unipush推送配置

APP推送記錄 一、使用框架 Uniappunipush推送插件 二、需要提前準備的 1.準備自有證書 可以用這個網站—香蕉云編&#xff08;用于安卓 ios證書生成&#xff09;https://www.yunedit.com/update/androidzhengshu/list 安卓證書生成后&#xff0c;下載證書&#xff0c;除了原文…

CentOS系統哪些版本?分別適用于那些業務或網站類型?

CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一款開源的企業級 Linux 操作系統&#xff0c;因其穩定性、安全性和長期支持周期&#xff0c;廣泛應用于服務器環境。以下是 CentOS 的主要版本及其適用場景的詳細介紹。1. CentOS 主要版本CentOS 的版本…

【前端】【Iconify圖標庫】【vben3】createIconifyIcon 實現圖標組件的自動封裝

&#x1f9e9; Vue 圖標管理全攻略&#xff1a;Iconify createIconifyIcon 封裝最佳實踐 在前端項目中&#xff0c;圖標無處不在。按鈕需要圖標&#xff0c;導航需要圖標&#xff0c;提示信息也少不了圖標。如何優雅、高效地使用圖標&#xff0c;是每個中大型 Vue 項目不可回…

數據可視化全流程設計指南

一、需求定義階段1. 明確核心目標回答關鍵問題&#xff1a;2. 確定數據特性import pandas as pd data pd.read_csv(your_data.csv) print(f""" 數據概覽: - 維度: {data.shape[1]}列 {data.shape[0]}行 - 類型分布: {data.dtypes.value_counts()} - 缺失值: …