Handler¶
概述¶
Go chassis以插件的形式支持在一次请求调用中,插入自己的处理逻辑。
实现¶
实现handler需要以下三个步骤:实现Handler接口,并根据其名称注册,最后在chassis.yaml中添加handler chain相关配置。其中[service_type] 可配置为Provider或Consumer,[chain_name]默认为default。
注册处理逻辑¶
RegisterHandler(name string, f func() Handler) error
实现处理接口¶
type Handler interface {
Handle(*Chain, *invocation.Invocation, invocation.ResponseCallBack)
Name() string
}
添加配置¶
servicecomb:
handler:
chain:
[service_type]:
[chain_name]: [your_handler_name]
示例¶
示例中注册的是名为fake-handler的处理链,其实现的Handle方法仅记录inv的endpoint信息。
package handler
import (
"github.com/go-chassis/go-chassis/v2/core/handler"
"github.com/go-chassis/go-chassis/v2/core/invocation"
"log"
)
const Name = "fake-handler"
type FakeHandler struct{}
func init() { handler.RegisterHandler(Name, New) }
func New() handler.Handler { return &FakeHandler{} }
func (h *FakeHandler) Name() string { return Name }
func (h *FakeHandler) Handle(chain *handler.Chain, inv *invocation.Invocation,
cb invocation.ResponseCallBack) {
log.Printf("fake handler running for %v", inv.Endpoint)
chain.Next(inv, func(r *invocation.InvocationResponse) error {
return cb(r)
})
}
chassis.yaml配置示例如下
servicecomb:
handler:
chain:
Provider:
default: fake-handler