手寫RPC框架

目錄

目的:

使用技術

時序圖

用例圖

具體代碼

Share

Core

Service

Web

使用步驟

運行結果


 

目的:

自己動手寫一個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

 

代碼下載:https://download.csdn.net/download/lan861698789/12131822 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章