Spring boot整合dubbo+zookeeper的详细过程

2025-07-11 18:50

本文主要是介绍Spring boot整合dubbo+zookeeper的详细过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、...

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框架自行增加

Spring boot整合dubbo+zookeeper的详细过程

Spring boot整合dubbo+zookeeper的详细过程

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

Spring boot整合dubbo+zookeeper的详细过程

(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>

China编程 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的日志

Spring boot整合dubbo+zookeeper的详细过程

Spring boot整合dubbo+zookeeper的详细过程

启动过程中如果报错:

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.编程China编程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=20000
	at org.apache.dubbo.registry.support.AbstractRegistryFactory.getRegistry(AbstractRegistryFactory.java:105) ~[dubbo-3.2.10.jar:3.2.10China编程]
	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的文章就介绍到这了,更多相关Spring boot整合dubbo+zookeeper内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Spring boot整合dubbo+zookeeper的详细过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155365

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直