☰
Spring Boot整合DubboZookeeper
2026/10/9 2:34:44 网站建设 项目流程

一、前言

Dubbo是一款由阿里巴巴开发的远程服务调用框架(RPC),其可以透明化的调用远程服务,就像调用本地服务一样简单。截至目前,Dubbo发布了基于Spring Boot构建的版本,版本号为0.2.0,这使得其与Spring Boot项目整合变得更为简单方便。而Zookeeper在这里充当的是服务注册中心的角色,我们将各个微服务提供的服务通过Dubbo注册到Zookeeper中,然后服务消费者通过Dubbo从Zookeeper中获取相应服务并消费。本文案例的架构图可以简单用下图表示:

本文案例最终项目结构如下图所示:

项目采用Maven构建,各模块的作用:

模块端口描述
common-dubbo-api无统一定义接口,供其余子模块引用
server-dubbo-provider8081服务提供者,实现common-api模块中的接口,然后暴露到Zookeeper中,供服务消费者使用
server-dubbo-consumer8082服务消费者,通过Dubbo从Zookeeper中获取服务并消费

二、Zookeeper安装

在搭建项目之前需要启动Zookeeper服务,Zookeeper下载地址:http://zookeeper.apache.org/releases.html#download。

下载后解压,将config目录下的zoo_sample.cfg重命名为zoo.cfg(Zookeeper配置文件,默认端口为2181,可根据实际进行修改)。然后双击bin目录下的zkServer.cmd启动即可。

三、构建父模块

新建一个Maven项目,groupId为cc.mrbird,artifactId为dubbo-boot,packaging指定为pom。然后引入Spring Boot,dubbo-spring-boot-starter和Zookeeper相关依赖:

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/><!-- lookup parent from repository --></parent><groupId>com.wno704</groupId><artifactId>spring-cloud-alibaba-dubbo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>Alibaba-Dubbo</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><project.version>0.0.1-SNAPSHOT</project.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.8</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.6.2</version></dependency><!-- https://mvnrepository.com/artifact/com.101tec/zkclient --><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>5.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins></build></project>

四、构建Common-Dubbo-Api

新建一个Maven模块,artifactId为common-dubbo-api。

4.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.wno704</groupId><artifactId>spring-cloud-alibaba-dubbo</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/><!-- lookup parent from repository --></parent><artifactId>common-dubbo-api</artifactId><name>Common-Dubbo-Api</name><description>Demo project for Spring Boot</description></project>

4.2 HelloService接口

项目只包含一个HelloService接口:

publicinterfaceHelloService{Stringhello(Stringmessage);}

至此我们可以开始构建服务提供者和服务消费者了。

五、构建Server-Dubbo-Provider

新建一个Maven模块,用于暴露Dubbo服务,artifactId为server-dubbo-provider。

5.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.wno704</groupId><artifactId>spring-cloud-alibaba-dubbo</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>server-dubbo-provider</artifactId><name>Server-Dubbo-Provider</name><description>Demo project for Spring Boot</description><dependencies><dependency><groupId>com.wno704</groupId><artifactId>common-dubbo-api</artifactId><version>${project.version}</version></dependency></dependencies></project>

这里我们引入了common-dubbo-api模块,用于后续实现相应的服务。

5.2 启动类改造

在Spring Boot启动类中我们加入@EnableDubbo注解,表示要开启dubbo功能:

importcom.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo@SpringBootApplicationpublicclassServerDubboProviderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ServerDubboProviderApplication.class,args);System.out.println("complete");}}

5.3 application.yml配置

server:port:8081dubbo:application:name:server-providerregistry:address:zookeeper://127.0.0.1:2181protocol:name:dubboport:20880

如果Zookeeper是集群的话,spring.dubbo.registry.address配置为:

spring:dubbo:registry:address:zookeeper://127.0.0.1:2181?backup=127.0.0.1:2180,127.0.0.1:2182

5.4 消费服务

接下来我们在com.wno704.alibaba.service路径下创建一个HelloService接口的实现类:

importcom.alibaba.dubbo.config.annotation.Service;importorg.springframework.stereotype.Component;@Service(interfaceClass=HelloService.class)@ComponentpublicclassHelloServiceImplimplementsHelloService{@OverridepublicStringhello(Stringmessage){return"hello,"+message;}}

值得注意的是@Service注解为Dubbo提供的com.alibaba.dubbo.config.annotation.Service,而非Spring的那个。其中interfaceClass是指要发布服务的接口。

通过上面的配置,我们已经将HelloService接口的实现暴露到Zookeeper中了,接下来我们继续创建一个服务消费者,来消费这个服务。

六、搭建Server-Dubbo-Consumer

新建一个Maven模块,用于消费Dubbo服务,artifactId为server-dubbo-consumer。

6.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.wno704</groupId><artifactId>spring-cloud-alibaba-dubbo</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>server-dubbo-consumer</artifactId><version>0.0.1-SNAPSHOT</version><name>Server-Dubbo-Consumer</name><description>Demo project for Spring Boot</description><dependencies><dependency><groupId>com.wno704</groupId><artifactId>common-dubbo-api</artifactId><version>${project.version}</version></dependency></dependencies></project>

同样的,我们也在Spring Boot启动类中我们加入@EnableDubbo注解,表示要开启dubbo功能。

6.2 application.yml配置

接着在application.yml中配置Dubbo:

server:port:8082dubbo:application:name:server-consumerregistry:address:zookeeper://127.0.0.1:2181protocol:name:dubbo

同服务提供者,我们需要指定Zookeeper的地址,协议为dubbo。

6.3 Controller测试

接着我们定义一个TestController,演示服务消费:

importcom.alibaba.dubbo.config.annotation.Reference;importcom.wno704.alibaba.service.HelloService;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassHelloController{@ReferenceprivateHelloServicehelloService;@GetMapping("/hello/{message}")publicStringhello(@PathVariableStringmessage){returnthis.helloService.hello(message);}}

通过Dubbo的@Reference注解注入需要使用的interface,类似于Spring的@Autowired。

七、测试

分别启动Server-Dubbo-Provider和Server-Dubbo-Consumer,访问http://localhost:8082/hello/wno704:

说明远程服务调用已经成功。

这里只是通过Spring Boot和Dubbo的整合来简单了解Dubbo的使用,仅作抛砖引玉,更为详细的Dubbo配置可以查看官方文

http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询