本文使用技术介绍
Dubbo 3.0.3
Springboot 2.5.5
文中代码已删减,具体代码位置见文末。

# 本文目标

快速构建 Springboot 应用,并继承 Dubbo

提供一个服务者,一个消费者。 在浏览器中请求消费者服务, 消费者服务调用 服务提供者,返回 响应。

# 创建项目

# 创建服务提供者

chapter02-provider 这个 module 下,编写了两个 sub module . chapter02-provider-api 表示对外提供的 RPC 接口。 chapter02-provider-impl 表示 RPC 接口的实现。

目录结构如下:

# chapter02-provider-api

# 引入 pom 文件

本模块下无需改动,使用 IDEA 生成的即可。具体代码见文末

# 定义 RPC 接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 服务者提供的接口规范
*
* @author fangjiaxiaobai
* @date 2021-10-13 20:44
*/
public interface IProviderService {
/**
* 演示调用demo
*
* @param name 入参,随即返回
* @return "hello, {name} . I am dubbo."
*/
String sayHello(String name);
}

这样 provider-api 服务就配置完成了。

# chapter02-provider-impl

# 引入 pom 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 服务提供者的RPC接口 -->
<dependency>
<groupId>com.fxb</groupId>
<artifactId>chapter02-provider-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- 引入Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.0.3</version>
<scope>compile</scope>
</dependency>

# 配置 application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
dubbo:
application:
#application-name
name: springboot-multicast-provider
id: springboot-multicast-provider
registry:
# 以广播的协议进行发布.
address: multicast://224.5.6.7:1234
id: registry
protocol:
name: dubbo
port: 20880
server:
port: 8080

# 实现服务提供者的业务逻辑

即 实现 RPC 接口。

1
2
3
4
5
6
7
8
9
10
11
12
/**
* sayHello 的具体实现
*
* @author fangjiaxiaobai
* @date 2021-10-13 20:47
*/
@DubboService
public class ProviderServiceImpl implements IProviderService {
@Override public String sayHello(String name) {
return String.format("hello, %s. I am dubbo.", name);
}
}

# 添加 Dubbo 注解

1
2
3
4
5
6
7
8
@SpringBootApplication
// 集成Dubbo
@EnableDubbo
public class Chapter02ProviderImplApplication {
public static void main(String[] args) {
SpringApplication.run(Chapter02ProviderImplApplication.class, args);
}
}

我们启动服务。可以看到:

这样服务提供者就启动成功了。

# 创建服务消费者

消费者的目录结构如下:

# 引入 maven 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 支持dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>

<!-- 服务提供者的RPC接口 -->
<dependency>
<groupId>com.fxb</groupId>
<artifactId>chapter02-provider-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

# 配置 application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
dubbo:
application:
#application-name
name: chapter02-with-springboot-consumer
id: chapter02-with-springboot-consumer
registry:
address: multicast://224.5.6.7:1234
id: registry
protocol:
name: dubbo
port: 20880
server:
port: 8081

# 编写 Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 消费者demo,
*
* @author fangjiaxiaobai
* @date 2021-10-13 21:00
*/
@RestController
public class ConsumerController {
@Resource
private ConsumerService consumerService;

@GetMapping("chapter02/sayHello/{name}")
public String sayHello(@PathVariable String name) {
return consumerService.sayHello(name);
}
}

# 编写 Service 层,调用提供提供者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 消费业务逻辑实现
*
* @author fangjiaxiaobai
* @date 2021-10-13 21:02
*/
@Service
public class ConsumerService {

// 引用Dubbo服务。使用@DubboReference注解
@DubboReference
private IProviderService providerService;

public String sayHello(String name) {
return providerService.sayHello(name);
}

}

# 编写启动类

1
2
3
4
5
6
7
8
9
@SpringBootApplication
@EnableDubbo
public class Chapter02ConsumerApplication {

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

}

启动后,可以看到控制台:

表示启动成功

# 测试

我们可以在浏览器中调用消费者的 sayHello 接口 http://localhost:8081/chapter02/sayHello/fangjiaxiaobai 就会看到 hello, fangjiaxiaobai. I am dubbo.

这样一个最最精简的 Dubbo 集成 Springboot 的服务就部署完成了。

# 链接

# 最后

期望和你一起遇见更好的自己