目录

目的:

使用技术

时序图

用例图

具体代码

Share

Core

Service

Web

使用步骤

运行结果


 

目的:

自己动手写一个RPC框架,懂得运行原理

使用技术

1..netty

2.动态代理

3.负载均衡算法

4.ZK

5.自动扫包

6.注解

时序图

手写RPC框架

 

用例图

手写RPC框架

 

具体代码

手写RPC框架

Share

业务web的接口jar包

手写RPC框架

只列出一个接口

public interface UserService {

    String getUserName(Long userId);

    Boolean deleteUser(Long userId);

}

 

Core

手写RPC框架

rpc框架的核心,service和web端都要引用这个jar。

引用core的项目,需要采用 扫包的方式,来把core里面的service放到spring上下文。

我这个例子里面因为 都是写在同一个包下的,所以不需要这一步了。

 

这里有 客户端代码,服务器端代码,netty的代码

 

 

 

Service

手写RPC框架

 

Web

手写RPC框架

 

 

 

使用步骤

服务器端:

1.需要使用RPC的service上,加一个注解@MyRpcProvide

2.扫包来加载core项目的service:cn.com.lzh.core

手写RPC框架

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服务端

手写RPC框架

2.运行服务器程序

这时候如果打开ZK的可视化客户端,会发现service已经保存了。

手写RPC框架

手写RPC框架

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

 

 

 

 

 

 

 

 

相关文章: