携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情 >>
哈喽,大家好,我是一条。
对于微服务架构来说,服务间通信方案必不可少,目前常用的远程调用框架就是 OpenFeign 和 Dubbo 。都是结合注册中心实现远程调用。
OpenFeign 其实就是对 RestTemplate 的一层封装,而 Dubbo 有自己独特通信协议,所以大型项目一般使用 Dubbo ,小型项目会使用 OpenFeign ,比较轻量。
Dubbo 支持 ZK,Nacos 等多种注册中心,考虑目前已经较少使用 ZK 做注册中心,本文就基于 Naocs + Dubbo 实现微服务间的远程调用。
nacos 环境在之前的文章已经聊过,本文不再赘述。重点在 Dubbo 。
pom
<!--dubbo相关-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- 解决dubbo2.7.13jar包冲突问题-->
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.11</version>
</dependency>
yaml
主要是为 Dubbo 配置 Nacos 的地址。
dubbo:
registry:
address: nacos://101.11.11.11:8848 #注册地址
application:
name: dubbo-consumer #应用名
consumer:
timeout: 30000 #超时时间
provider and consume
既然是服务间调用,我们需要两个服务:provider and consume ,同时在启动类开始 Dubbo 。@EnableDubbo
DubboService
对于服务端来说,想开放哪个接口,只需要在接口添加 @DubboService 注解。
@DubboService
@Component
public class RpcService implements InfoService {
public String getInfo() {
return "hello,这里是dubbo-provider模块!";
}
}
DubboReference
那客户端只需要加上 DubboReference 注解就可以实现像调用本地方法一样调用远程方法。
关键一点是实现的接口最好在公共的包下。
@RestController
@RequestMapping("/rpc")
public class TestRpcController {
@DubboReference
private InfoService infoService;
@GetMapping("/info")
public String getInfo(){
return infoService.getInfo();
}
}
启动测试
可以看到注册中心已经有了 DubboService 的信息。
直接访问客户端的接口,返回服务端数据:
\