源碼位置: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的一些問題,如半包;線程模型構建也不完善;很多分佈式的問題,如“腦裂”,節點宕機等等都沒考慮。
一轉眼又很久沒寫文章了,懶惰是人的本性啊。在此表個決心,從此以後提高文章質量,寫走心的技術文章。每篇走心的文章,我都會在標題後面加上“@精選”,方便篩選。同時也會開始在知乎上寫文章,促進個人思考與沉澱。