目录
目的:
自己动手写一个RPC框架,懂得运行原理
使用技术
1..netty
2.动态代理
3.负载均衡算法
4.ZK
5.自动扫包
6.注解
时序图
|
|
用例图
|
|
具体代码
|
|
Share
业务web的接口jar包
|
|
我只列出一个接口
|
public interface UserService { String getUserName(Long userId); Boolean deleteUser(Long userId); } |
Core
|
|
rpc框架的核心,service和web端都要引用这个jar。
引用core的项目,需要采用 扫包的方式,来把core里面的service放到spring上下文。
我这个例子里面因为 都是写在同一个包下的,所以不需要这一步了。
这里有 客户端代码,服务器端代码,netty的代码
Service
|
|
Web
|
|
使用步骤
服务器端:
1.需要使用RPC的service上,加一个注解@MyRpcProvide
2.扫包来加载core项目的service:cn.com.lzh.core
|
|
2.配置yml
|
myrpc: server: run: true netty: host: 127.0.0.1 port: 8801 zk: address: 127.0.0.1 |
参考MyRpcConfig里面的注解
客户端
1.在boot的启动上加注解@MyRpcConsumer("cn.com.lzh.service"),告知需要使用RPC使用RPC动态代理的接口包名
2.配置YML
|
myrpc: zk: address: 127.0.0.1 |
运行结果
1.运行ZK服务端
|
|
2.运行服务器程序
这时候如果打开ZK的可视化客户端,会发现service已经保存了。
|
|
|
|
3.客户端写一个测试方法
|
@RestController @SpringBootApplication @MyRpcConsumer("cn.com.lzh.service") public class MyRpcBizWeb { @Autowired private UserService userService;
public static void main(String[] args) { SpringApplication.run(MyRpcBizWeb.class, args); }
@RequestMapping(value = "test", method = { RequestMethod.POST, RequestMethod.GET }) public void test() throws Exception { try { String user = userService.getUserName(1111L); System.out.println("getUserName:" + user); boolean delUser = userService.deleteUser(123L); System.out.println("delUser:" + delUser); } catch (Exception e) { e.printStackTrace(); } } } |
运行:http://localhost:8080/test