美文网首页
聊聊dubbo-go-proxy的recoveryFilter

聊聊dubbo-go-proxy的recoveryFilter

作者: go4it | 来源:发表于2021-02-05 22:10 被阅读0次

    本文主要研究一下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的recoveryFilter

          本文链接:https://www.haomeiwen.com/subject/uvagtltx.html