自主實現RPC工具-myrpc

    源碼位置https://github.com/AsPhilosopher/myrpc

    源碼下載:https://download.csdn.net/download/jobsandczj/10309380

    RPC(Remote Procedure Call),遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。在如今分佈式盛行的年代,這一項技術變得尤爲重要。常用的RPC框架有motan,Dubbo等。

    我這款RPC工具,旨在通過簡單的配置,低入侵地調用遠程方法。同時能將調用時發生的異常友好地返回,便於排查錯誤。


    時序圖非常簡單,客戶端請求服務端,本地獲取代理對象然後發送請求到服務端。服務端執行簡單的負載均衡策略,然後執行讀請求,執行目標代碼,返回執行結果或異常。


    類圖裏的類分爲幾個部分,客戶端(黃),服務端(紅+綠+藍),負載均衡模塊,基礎工具類模塊。

    實現原理很簡單,客戶端獲取代理類,然後基於NIO發起遠程請求,服務端響應並返回執行結果。

使用方式很簡單:

客戶端配置與調用:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <ip>127.0.0.1</ip>
    <port>8899</port>

    <service name="test" interface="com.wheel.test.TestService" execute_timeout="1000" response_timeout="1000"/>
</config>
package com.wheel.test;

import com.wheel.client.AOPFactory;
import com.wheel.dto.RequestData;

/**
 * Created with IntelliJ IDEA
 * Date: 2018/1/1
 * Time: 下午2:43
 *
 * @author 陳樟傑
 */
public class ClientTest {
    public static void main(String[] args) {

        //獲取代理bean
        TestService testService = AOPFactory.getBean("test");

        System.out.println(testService.action());
        testService.action(10);
        testService.fun();
        System.out.println(testService.fun(10, "5555"));
    }
}

服務端配置:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <channel_number>3</channel_number>
    <port>8899</port>
    <buffer_size>256</buffer_size>
    <pool_size>5</pool_size>

    <mapper interface="com.wheel.test.TestService" implement="com.wheel.test.TestServiceImpl"/>
</config>

    當初寫這個東西是因爲學校工程實習,我就寫了這個“玩具”來應付。與真正的RPC框架還有很大的差距。沒考慮很多細節問題,如NIO的一些問題,如半包;線程模型構建也不完善;很多分佈式的問題,如“腦裂”,節點宕機等等都沒考慮。

    一轉眼又很久沒寫文章了,懶惰是人的本性啊。在此表個決心,從此以後提高文章質量,寫走心的技術文章。每篇走心的文章,我都會在標題後面加上“@精選”,方便篩選。同時也會開始在知乎上寫文章,促進個人思考與沉澱。

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