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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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()} - 缺失值: …