提示:本文实现RPC的方法和具体步骤,注意,需要引入Dubbo2.7.7以上版本的依赖
前言
笔者从入门Java后端至今,一直都在做笔记(电子笔记),但是始终没有动手写博客。如今笔者即将毕业,现阶段正处于实习期,虽然有了一定的Java后端基础,但仍然需快速的学习。本次起笔写博客,是想从此刻开始,对自己学到的东西进行纪录,以便日后遇到类似的问题时,能够方便快捷的解掉。本文主要记录今日在公司实习培训时,实现RPC的方法与步骤,具体如下:
一、实现RPC的思路
由于笔者培训时,主管已经帮我配好了注册中心,所以这里先暂时忽略注册中心的配置,下文提到的Service模块和Web模块启动后,能够注册到注册中心,并且能够发现在注册中心注册的所有服务,并实现远程调用,这个过程大概如图1所示,最后在Service模块实现并暴露服务,在Web模块注入并调用服务。
二、具体步骤
1.在Service模块实现业务并暴露接口
在配置好注册中心等环境后,在Service模块实现具体的业务逻辑,并且通过@DubboService注解把服务暴露,暴露的接口类需要实现远程服务接口RemoteService,代码如下所示:
// 实现并暴露接口
@DubboService(interfaceClass = RemoteService.class)
public class ServiceImpl implements RemoteService {
// 实现 查询用户
public AuthUser getUser(String id){
User entity = new User();
entity.setId(id);
User user = userService.selectOne(id);
return user;
}
}
注意:RemoteService.class是一个接口,用来约束对外暴露的接口的行为,其定义如下:
/**
* 该类定义在公共模块,comment中,提供给所有服务引用
*/
public interface RemoteService(){
/**
* 根据 id 查询用户信息
*
*/
User getUser(Integer id);
// ...其他行为(方法)
}
2.在Web模块注入并调用接口
使用@DubboReference在Web模块注入并调用远程接口,代码如下所示:
@RestController
@RequestMapping("/query")
public class MyController {
// 注入远程服务,RemoteService 来自工共模块 comment
@DubboReference
private RemoteService remoteService;
@GetMapping("/user/{id}")
@ApiOperation(valeu = "根据id查询用户")
public User getUser(@PathVariable("id") Integer id){
return remoteService.getUser(id);
}
}
总结
本文记录了在配置好注册中心等环境下,实现远程调用的思路和步骤,主要是创建和实现服务提供者Service模块 和 服务消耗者 Web模块。