diff --git a/util/mux/mux.go b/util/mux/mux.go new file mode 100644 index 00000000..899f449a --- /dev/null +++ b/util/mux/mux.go @@ -0,0 +1,47 @@ +// Package mux provides proxy muxing +package mux + +import ( + "context" + "sync" + + "github.com/micro/go-micro/debug/handler" + "github.com/micro/go-micro/proxy" + "github.com/micro/go-micro/server" +) + +// Server is a proxy muxer that incudes the use of the DefaultHandler +type Server struct { + // name of service + Name string + // Proxy handler + Proxy proxy.Proxy +} + +var ( + once sync.Once +) + +func (s *Server) ServeRequest(ctx context.Context, req server.Request, rsp server.Response) error { + if req.Service() == s.Name { + return server.DefaultRouter.ServeRequest(ctx, req, rsp) + } + return s.Proxy.ServeRequest(ctx, req, rsp) +} + +func New(name string, p proxy.Proxy) *Server { + // only register this once + once.Do(func() { + server.DefaultRouter.Handle( + server.DefaultRouter.NewHandler( + handler.DefaultHandler, + server.InternalHandler(true), + ), + ) + }) + + return &Server{ + Name: name, + Proxy: p, + } +}