Dubbo学习笔记之springboot整合dubbo及dubbo相关功能

springboot中引入dubbo

springboot整合dubbo

springboot版本:2.1.12.RELEASE
使用zookeeper作为注册中心,zookeeper版本:3.5.5
zookeeper要先启动

构建maven项目

构建三个maven项目,分别是
dxy-api:公共api
dubbo-springboot-server:服务端
dubbo-springboot-client:客户端

dxy-api 公共接口定义

1
2
3
public interface HelloService {
String sayHello(String name);
}

dubbo-springboot-server

maven依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?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 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.1.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dxysun.dubbo</groupId>
<artifactId>dubbo-springboot-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-springboot-server</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>

<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>

<dependency>
<groupId>com.dxysun</groupId>
<artifactId>dxy-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

application.properties 配置

1
2
3
dubbo.application.name=dubbo-springboot-server
dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo.scan.base-packages=com.dxysun.dubbo.server.springboot

Mian函数注解开启Dubbo

1
2
3
4
5
6
7
8
9
10
11
@SpringBootApplication
@EnableDubbo
public class DubboSpringbootServerApplication
{

public static void main(String[] args)
{
SpringApplication.run(DubboSpringbootServerApplication.class, args);
}

}

接口实现

1
2
3
4
5
6
7
8
9
10
import com.dxysun.dubbo.api.HelloService;
import org.apache.dubbo.config.annotation.Service;

@Service
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "springboot dubbo say " + name;
}
}

dubbo-springboot-client

maven依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?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 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.1.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dxysun.dubbo</groupId>
<artifactId>dubbo-springboot-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-springboot-client</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>

<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>

<dependency>
<groupId>com.dxysun</groupId>
<artifactId>dxy-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

<!-- 需要 zookeeper 3.5.x 版本-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

application.properties 配置

1
2
3
4
5
6
server.port=8081

dubbo.application.name=dubbo-springboot-client
# zookeeper地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo.scan.base-packages=com.dxysun.dubbo.client.springboot

Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import com.dxysun.dubbo.api.HelloService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@Reference
private HelloService helloService;

@GetMapping("/hello")
public String hello(@RequestParam(name = "name") String name)
{
return helloService.sayHello(name);
}
}

使用 @Reference注解去注入dubbo服务

Main函数 添加开启Dubbo的注解

1
2
3
4
5
6
7
8
9
10
11
@SpringBootApplication
@EnableDubbo
public class DubboSpringbootClientApplication
{

public static void main(String[] args)
{
SpringApplication.run(DubboSpringbootClientApplication.class, args);
}

}

启动

启动 dubbo-springboot-server和dubbo-springboot-client
访问 http://localhost:8081/hello?name=world,浏览器返回 springboot dubbo say world 说明运行成功

Dubbo 2.7 新的功能

动态配置规则

动态配置是 Dubbo2.7 版本引入的一个新的功能,就是把 dubbo.properties 中的属性进行集中式存储,存储在其他的服务器上。 那么如果需要用到集中式存储,那么还需要一些配置中心的组件来支撑。 目前 Dubbo 能支持的配置中心有:apollo、nacos、zookeeper

具体内容参考动态配置中心

元数据中心

Dubbo2.7 的另外一个新的功能,就是增加了元数据的配置。在 Dubbo2.7 之前,所有的配置信息,比如服务接口名称、重试次数、版本号、负载策略、容错策略等等,所有参数都是基于 url 形式配置在 zookeeper 上的。这种方式会造成一些问题

  1. url 内容过多,导致数据存储空间增大
  2. url 需要涉及到网络传输,数据量过大会造成网络传输过慢
  3. 网络传输慢,会造成服务地址感知的延迟变大,影响服务的正常响应

服务提供者这边的配置参数有 30 多个,有一半是不需要作为注册中心进行存储的。而消费者这边可配置的参数有 25 个以上,只有个别是需要传递到注册中心的。所以,在 Dubbo2.7 中对元数据进行了改造,简单来说,就是把属于服务治理的数据发布到注册中心,其他的配置数据统一发布到元数据中心。这样一来大大降低了注册中心的负载。

具体内容参考元数据中心

元数据中心配置

元数据中心目前支持 redis 和 zookeeper。官方推荐是采用 redis。毕竟 redis 本身对于非结构化存储的数据读写性能比较高。当然,也可以使用 zookeeper 来实现。 在配置文件中添加元数据中心的地址

1
2
dubbo.metadata-report.address=zookeeper://192.168.13.106:2181 
dubbo.registry.simplified=true //注册到注册中心的 URL 是否采用精简模式的(与低版本兼容)

代码gitee地址

参考

dubbo-spring-boot-project

打赏

请我喝杯咖啡吧~

支付宝
微信