W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Suite(套件)是一種對于擴展的高級抽象,可以理解為是對于 Option 和 Middleware 的組合和封裝。
在 middleware 擴展一文中我們有說到,在擴展過程中,要記得兩點原則:
這個原則針對 Suite 也是一樣有效的。
Suite 的定義如下:
type Suite interface {
Options() []Option
}
這也是為什么說,Suite 是對于 Option 和 Middleware(通過 Option 設(shè)置)的組合和封裝。
Server 端和 Client 端都是通過 ?WithSuite
?這個方法來啟用新的套件。
在初始化 Server 和 Client 的時候,Suite 是采用 DFS(Deep First Search) 方式進行設(shè)置。
舉個例子,假如我有以下代碼:
type s1 struct {
timeout time.Duration
}
func (s s1) Options() []client.Option {
return []client.Option{client.WithRPCTimeout(s.timeout)}
}
type s2 struct {
}
func (s2) Options() []client.Option {
return []client.Option{client.WithSuite(s1{timeout:1*time.Second}), client.WithRPCTimeout(2*time.Second)}
}
那么如果我在創(chuàng)建 client 時傳入 ?client.WithSuite(s2{})
?, ?client.WithRPCTimeout(3*time.Second)
?,在初始化的時候,會先執(zhí)行到 ?client.WithSuite(s1{})
?,然后是 ?client.WithRPCTimeout(1*time.Second)
?,接著是 ?client.WithRPCTimeout(2*time.Second)
?,最后是 ?client.WithRPCTimeout(3*time.Second)
?。這樣初始化之后,RPCTimeout 的值會被設(shè)定為 3s(參見開頭所說的原則)。
Suite 是一種更高層次的組合和封裝,更加推薦第三方開發(fā)者能夠基于 Suite 對外提供 Kitex 的擴展,Suite 可以允許在創(chuàng)建的時候,動態(tài)地去注入一些值,或者在運行時動態(tài)地根據(jù)自身的某些值去指定自己的 middleware 中的值,這使得用戶的使用以及第三方開發(fā)者的開發(fā)都更加地方便,無需再依賴全局變量,也使得每個 client 使用不同的配置成為可能。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: