SpringBoot2.X集成Dubbo+Zookeeper
前言
Dubbo的学习记录,照着官方文档的demo敲了一遍,理清整个流程的思路。
前提:
- 本地已安装zookeeper。(官方demo有提供自带的zookeeper,但我还是使用的本地zookeeper)
- 有SpringBoot基础。(至少能够用常见的注解,以及知道SpringBoot中的配置文件怎么编写)
- 有Maven基础。(理清项目中父依赖与子依赖的集成管理关系)
- 使用IDEA开发。
我使用的版本:
- dubbo 3.2.0-beta.4
- springboot 2.7.8
- java8 (jdk1.8)
- zookeeper 3.7.1
一、 搭建项目
1、新建一个Maven项目
2、在此项目下,右键新建3个 Moudle 模块
分别是 dubbo-spring-boot-demo-interface
提供公共接口。
dubbo-spring-boot-demo-provider
服务提供者。
dubbo-spring-boot-demo-consumer
服务消费者。
此时,项目结构为:
在3个子模块的 src 路径下建立包为 com.example
二、导入需要的依赖
首先要明白项目之间的关系,一开始建立的 dubbo-spring-boot-demo
为整个demo项目的父项目,它下面有3个儿子,分别是: dubbo-spring-boot-demo-interface
、dubbo-spring-boot-demo-provider
、dubbo-spring-boot-demo-consumer
对于多模块项目,首先要添加父项目的依赖。
1、父项目的 pom.xml
配置相关依赖信息
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>dubbo-spring-boot-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>dubbo-spring-boot-demo-interface</module>
<module>dubbo-spring-boot-demo-provider</module>
<module>dubbo-spring-boot-demo-consumer</module>
</modules>
<properties>
<!--start springboot和dubbo的版本信息-->
<dubbo.version>3.2.0-beta.4</dubbo.version>
<spring-boot.version>2.7.8</spring-boot.version>
<!--end-->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2、dubbo-spring-boot-demo-provider
和 dubbo-spring-boot-demo-consumer
在 pom.xml
里配置相关依赖信息
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>dubbo-spring-boot-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>dubbo-spring-boot-demo-provider</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>dubbo-spring-boot-demo-interface</artifactId>
<version>${project.parent.version}</version>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<type>pom</type>
<exclusions>
<exclusion>
<artifactId>slf4j-reload4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- spring boot starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
导入完之后,点击 maven图标,全部重新加载一下。
三、编写配置文件
在 dubbo-spring-boot-demo-provider
和 dubbo-spring-boot-demo-consumer
的resources目录下编写SpringBoot的配置文件 application.yml
dubbo:
application:
# name 是服务应用的名字,可以随便写,但是要注意规范
name: dubbo-spring-boot-demo-provider
# protocol 是dubbo进行RPC的协议
protocol:
# name 是协议名称
name: dubbo
# port 端口号为-1,表示随机端口,随机端口对dubbo应用不影响,因为我们不需要知道它们的具体端口号
port: -1
registry:
# 服务注册中心的地址 ,我们这里使用本地zookeeper
address: zookeeper://127.0.0.1:2181
在这个配置文件中,定义了Dubbo的应用名、Dubbo的协议信息、Dubbo的注册中心地址。
四、编写接口
在 dubbo-spring-boot-demo-interface
中编写接口
public interface DemoService {
String sayHello(String name);
}
五、编写服务提供类
在 dubbo-spring-boot-demo-provider
下面编写服务提供类,服务提供类实现上面的接口。
package com.example.impl;
import com.example.DemoService;
import org.apache.dubbo.config.annotation.DubboService;
/**
* @Description
* @Author Zheng
* @CreateTime 2023/5/13 15:44
*/
//DubboService 注解是Dubbo3.0之后代替原来的Service注解
@DubboService
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "I am a dubbo application, my name is :" + name;
}
}
编写provider的启动类
package com.example;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Description
* @Author Zheng
* @CreateTime 2023/5/13 15:51
*/
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
六、编写服务消费类
编写一个请求类,因为要用到网络请求,所以我们要先导入 web 依赖
在 dubbo-spring-boot-demo-consumer
的 pom.xml
里面导入 spring-boot-starter-web
这个依赖
<!--导入web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
导完加载一下。
在controller包下,编写我们的消费者类
编写消费者启动类
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
至此,编码全部完成。
七、启动本地zookeeper
我是 windows
下启动的本地 zookeeper
先启动 zkServer.cmd
再启动 zkCli.cmd
,双击就行。
以下是启动后的界面
启动完毕就行了。
八、在IDEA里面先启动
先启动服务提供类,启动时长大概10s左右
当看到这一行,说明启动成功!
[Dubbo] Current Spring Boot Application is await...
再去启动服务消费类
测试服务是否能成功调用
上面可以看见我们的服务启动在8081端口,网页上访问该请求地址
lcoalhost:8081/demo
成功调用!
至此,在SpringBoot里面使用Dubbo+Zookeeper的demo已完成。
附官方文档地址:https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/quick-start/spring-boot/