W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Transport Pipeline 參考 Netty ChannelPipeline,提供 Inbound 和 Outbound 接口,支持對(duì)消息或 I/O 事件擴(kuò)展。基于 In/OutboundHandler 可以擴(kuò)展實(shí)現(xiàn) TLS、限流、透?jìng)餍畔⑻幚淼?。如下圖所示,各個(gè) BoundHandler 會(huì)串行依次執(zhí)行。
// OutboundHandler is used to process write event.
type OutboundHandler interface {
Write(ctx context.Context, conn net.Conn, send Message) (context.Context, error)
}
// InboundHandler is used to process read event.
type InboundHandler interface {
OnActive(ctx context.Context, conn net.Conn) (context.Context, error)
OnInactive(ctx context.Context, conn net.Conn) context.Context
OnRead(ctx context.Context, conn net.Conn) (context.Context, error)
OnMessage(ctx context.Context, args, result Message) (context.Context, error)
}
Kitex 支持連接級(jí)別和請(qǐng)求級(jí)別限流,限流是為了保障服務(wù)的可用性,當(dāng)達(dá)到閾值應(yīng)當(dāng)及時(shí)限流,放到 Transport 層可以達(dá)到及時(shí)限流的目的,實(shí)現(xiàn)見 limiter_inbound.go。
元信息透?jìng)魇腔趥鬏攨f(xié)議透?jìng)饕恍?nbsp;RPC 額外的信息給下游,同時(shí)讀取傳輸協(xié)議中上游透?jìng)鞯男畔?,?shí)現(xiàn)見 transmeta_bound.go。
為更明確的為使用者元信息透?jìng)鞯臄U(kuò)展能力,Kitex 單獨(dú)定義了信息透?jìng)鞯奶幚斫涌?nbsp;MetaHandler,這里會(huì)執(zhí)行 MetaHandler 進(jìn)行透?jìng)餍畔⒌奶幚怼?/p>
// MetaHandler reads or writes metadata through certain protocol.
type MetaHandler interface {
WriteMeta(ctx context.Context, msg Message) (context.Context, error)
ReadMeta(ctx context.Context, msg Message) (context.Context, error)
}
option: ?WithBoundHandler
?
svr := xxxservice.NewServer(handler, server.WithBoundHandler(yourBoundHandler))
option: ?WithBoundHandler
?
cli, err := xxxservice.NewClient(targetService, client.WithBoundHandler(yourBoundHandler))
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: