本文摘自网络,作者,侵删。
序
本文主要研究一下dubbo-go-proxy的recoveryFilter
recoveryFilter
dubbo-go-proxy/pkg/filter/recovery/recovery.go
func Init() { extension.SetFilterFunc(constant.RecoveryFilter, recoveryFilterFunc()) } func recoveryFilterFunc() context.FilterFunc { return New().Do() } // recoveryFilter is a filter for recover. type recoveryFilter struct { } // New create timeout filter. func New() filter.Filter { return &recoveryFilter{} }
recoveryFilter往extension注册名为dgp.filters.recovery的recoveryFilterFunc;该func执行的是recoveryFilter的Do方法
Do
dubbo-go-proxy/pkg/filter/recovery/recovery.go
// Recovery execute recoveryFilter filter logic, if recover happen, print log or do other things. func (f recoveryFilter) Do() context.FilterFunc { return func(c context.Context) { defer func() { if err := recover(); err != nil { logger.Warnf("[dubboproxy go] error:%+v", err) c.WriteErr(err) } }() c.Next() } }
Do方法先注册一个defer func进行recover,然后再执行c.Next()
小结
dubbo-go-proxy的recoveryFilter注册一个defer func进行recover,然后再执行c.Next()。
doc
- dubbo-go-proxy
本文来自:51CTO博客
感谢作者:mb6018ead621887
查看原文:聊聊dubbo-go-proxy的recoveryFilter
相关阅读 >>
海康/大华sdk协议easycvr如何通过Go语言读取csv文件内容?
2021-03-05:Go中,io密集型的应用,比如有很多文件io,磁盘io,网络io,调大Goma
更多相关阅读请进入《Go》频道 >>
Go语言101
一个与时俱进的Go编程知识库。