本文使用技术介绍
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
|
public interface IProviderService {
String sayHello(String name); }
|
这样 provider-api
服务就配置完成了。
# chapter02-provider-impl
# 引入 pom 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <dependency> <groupId>com.fxb</groupId> <artifactId>chapter02-provider-api</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency>
<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: 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
|
@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
@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
| <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
<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: 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
|
@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
|
@Service public class ConsumerService {
@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
的服务就部署完成了。
# 链接
Dubbo与Springboot集成
https://gitee.com/fangjiaxiaobai/learn_java.git
# 最后
期望和你一起遇见更好的自己
扫码或搜索:方家小白
发送 290992
即可立即永久解锁本站全部文章