W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
熔斷器中間件,用于提供客戶端熔斷功能,默認實現(xiàn)了sre breaker 算法。
WithGroup
?breaker 依賴于 ?container/group
? 來實現(xiàn)對于針對不同 ?Operation
?使用互相獨立的 breaker。 ?WithGroup
?可以配置自定義的 ?Breaker
?來替換默認的熔斷算法:
// WithGroup with circuit breaker group.
// NOTE: implements generics circuitbreaker.CircuitBreaker
func WithGroup(g *group.Group) Option {
return func(o *options) {
o.group = g
}
}
默認配置會針對不同的 ?Operation
?生成獨立的 breaker:
opt := &options{
group: group.NewGroup(func() interface{} {
return sre.NewBreaker()
}),
}
group.Group 是一個 懶加載容器 在本文中裝載進 group.Group 的實例,應實現(xiàn) ?aegis/circuitbreaker
? 的 CircuitBreaker 接口。
// CircuitBreaker is a circuit breaker.
type CircuitBreaker interface {
Allow() error // 判斷請求是否允許發(fā)送,如果返回 error 則表示請求被拒絕
MarkSuccess() // 標記請求成功
MarkFailed() // 標記請求失敗
}
// http
conn, err := http.NewClient(
context.Background(),
http.WithMiddleware(
circuitbreaker.Client(),
),
http.WithEndpoint("127.0.0.1:8000"),
)
// grpc
conn,err := transgrpc.Dial(
context.Background(),
grpc.WithMiddleware(
circuitbreaker.Client(),
),
grpc.WithEndpoint("127.0.0.1:9000"),
)
當熔斷器觸發(fā)時,會在一段時間內對于該?Operation
?的調用快速失敗,并返回錯誤?ErrNotAllowed
?,定義如下:
// ErrNotAllowed is request failed due to circuit breaker triggered.
var ErrNotAllowed = errors.New(503, "CIRCUITBREAKER", "request failed due to circuit breaker triggered")
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: