編寫公共專案—自定義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方法 注意 由上而下...