自定義RPC框架思路筆記

2021-10-12 19:53:22 字數 3927 閱讀 9859

編寫公共專案—自定義fastjson序列化協議,存放介面

public

class

jsonserializer

implements

serializer

@override

public

t deserialize

(class

clazz,

byte

bytes)

}

public

class

rpcdecoder

extends

bytetomessagedecoder

@override

protected

void

decode

(channelhandlercontext channelhandlercontext,

bytebuf bytebuf, list

list)

throws exception

//標記當前讀的位置

bytebuf.

markreaderindex()

;int datalength = bytebuf.

readint()

;if(bytebuf.

readablebytes()

< datalength)

byte

data =

newbyte

[datalength]

;//將bytebuf中的資料讀入data位元組陣列

bytebuf.

readbytes

(data)

; object obj = serializer.

deserialize

(clazz, data)

; list.

add(obj);}

}

public

class

rpcrequest

public

inte***ce

serializer

public

class

rpcencoder

extends

messagetobyteencoder

@override

protected

void

encode

(channelhandlercontext channelhandlercontext,

object msg, bytebuf bytebuf)

throws exception

}}

編寫客戶端

1)啟動類—呼叫方法,列印結果

public

class

consumerboot

}catch

(exception e)

}}

2)消費者—初始化客戶端,實現動態**方法

public

class

rpcconsumer})

; bootstrap.

connect

("127.0.0.1"

,8999).

sync()

;}//4.編寫乙個方法,使用jdk動態**建立物件

public

static object createproxy

(class<

?> serviceclass)

,(proxy, method, args)

->

//1.初始化客戶端client

if(userclienthandler == null)

//2.給userclienthandler設定param引數

rpcrequest rpcrequest =

newrpcrequest()

; rpcrequest.

setclassname

(method.

getdeclaringclass()

.getname()

);rpcrequest.

setmethodname

(method.

getname()

);rpcrequest.

setparametertypes

(method.

getparametertypes()

);rpcrequest.

setparameters

(args)

; userclienthandler.

setparam

(rpcrequest)

;//3.使用執行緒池開啟執行緒處理call,並返回結果

object result = executorservice.

submit

(userclienthandler)

.get()

; 結果

return result;})

;}}

3)消費者handler—處理服務端返回的結果

public

class

userclienthandler

extends

channelinboundhandleradapter

implements

callable

//3.實現channelread 當我們讀到伺服器資料,該方法自動執行

@override

public

synchronized

void

channelread

(channelhandlercontext ctx, object msg)

throws exception

//4.將客戶端的資料寫到伺服器

public

synchronized object call()

throws exception

//5.設定引數的方法

public

void

setparam

(rpcrequest param)

}

3.編寫服務端

1)啟動類—啟動服務

public

class

serverboot

}2)介面的實現方法

@service

public

class

userserviceimpl

implements

iuserservice

}

3)服務端

@component

public

class

providerserver})

;//4.繫結埠

serverbootstrap.

bind

(port)

.sync()

;}}

4)服務端handler—監聽處理傳入的rpcrequest

@component

public

class

userservicehandler

extends

channelinboundhandleradapter

implements

@override

public

void

throws bean***ception

}

自定義RPC框架實戰 一 設計思路

學習rpc原理,鍛鍊自己設計能力。服務註冊 服務發現 定時接收客戶端服務心跳 容錯處理 集群負載均衡 位址路由 服務監控 獲取服務 rpc 即remote procedure call,遠端過程呼叫 指的是對網路上另外乙個計算機上的,某段特定的函式 的呼叫。首先得寫乙個註冊中心服務,主要功能如下 1...

自定義MVC框架

第一步 用乙個容器 或者servlet類 filter類 接受請求 一般在web.xml中進行配置,攔截請求到actionservlet 控制servlet 中。第二步 分割請求路徑 得到請求訪問類以及訪問方法的標示字串 解析請求的url路徑,讀取配置檔案。第三步 通過字串獲得action類物件以及...

自定義MVC框架

mvc全名是model 模型 view 檢視 controller 控制器 的縮寫。是一種軟體設計典範,用一種業務邏輯 資料 介面顯示分離的方法組織 v jsp 表現層 c servlet action m 實體域模型 名詞 實體類 過程域模型 動詞,如實體類要做curd dao方法 注意 由上而下...