W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
參考samples dubbo-go-samples/filter
// Filter interface defines the functions of a filter // Extension - Filter type Filter interface { // Invoke is the core function of a filter, it determines the process of the filter Invoke(context.Context, protocol.Invoker, protocol.Invocation) protocol.Result // OnResponse updates the results from Invoke and then returns the modified results. OnResponse(context.Context, protocol.Result, protocol.Invoker, protocol.Invocation) protocol.Result }
Filter 可以加載在 Consumer 端或者 Provider端。當加載在 Consumer 端,其Invoke函數(shù)調(diào)用的下游為網(wǎng)絡(luò)層,OnResponse 為請求結(jié)束從網(wǎng)絡(luò)層獲取到返回結(jié)果后被調(diào)用。當加載在 Provider 端,其 Invoke 函數(shù)調(diào)用的下游為用戶代碼,OnResponse 為用戶代碼執(zhí)行結(jié)束后向下傳遞至網(wǎng)絡(luò)層前被調(diào)用。
Filter 采用面向切面設(shè)計的思路,通過對 Filter 的合理擴展,可以記錄日志、設(shè)置數(shù)據(jù)打點,記錄 invoker 所對應(yīng)服務(wù)端性能,限流等等工作。
框架預(yù)定義了一系列filter,可以在配置中直接使用,其代碼實現(xiàn)位于filter
用戶在配置文件中配置了將要使用的 Filter 時,框架使用用戶配置的 Filter,否則則加載默認Filter:
指定filter時可用’,‘分隔
用戶可在代碼中自定義 Filter,注冊到框架上,并在配置中選擇使用。
func init() { extension.SetFilter("myCustomFilter", NewMyClientFilter) } func NewMyClientFilter() filter.Filter { return &MyClientFilter{} } type MyClientFilter struct { } func (f *MyClientFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result { fmt.Println("MyClientFilter Invoke is called, method Name = ", invocation.MethodName()) return invoker.Invoke(ctx, invocation) } func (f *MyClientFilter) OnResponse(ctx context.Context, result protocol.Result, invoker protocol.Invoker, protocol protocol.Invocation) protocol.Result { fmt.Println("MyClientFilter OnResponse is called") return result }
下一章:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: