github.com/micro/go-micro/v2@v2.9.1/util/mux/mux.go (about) 1 // Package mux provides proxy muxing 2 package mux 3 4 import ( 5 "context" 6 "sync" 7 8 "github.com/micro/go-micro/v2/client" 9 "github.com/micro/go-micro/v2/debug/service/handler" 10 "github.com/micro/go-micro/v2/proxy" 11 "github.com/micro/go-micro/v2/server" 12 ) 13 14 // Server is a proxy muxer that incudes the use of the DefaultHandler 15 type Server struct { 16 // name of service 17 Name string 18 // Proxy handler 19 Proxy proxy.Proxy 20 } 21 22 var ( 23 once sync.Once 24 ) 25 26 func (s *Server) ProcessMessage(ctx context.Context, msg server.Message) error { 27 if msg.Topic() == s.Name { 28 return server.DefaultRouter.ProcessMessage(ctx, msg) 29 } 30 return s.Proxy.ProcessMessage(ctx, msg) 31 } 32 33 func (s *Server) ServeRequest(ctx context.Context, req server.Request, rsp server.Response) error { 34 if req.Service() == s.Name { 35 return server.DefaultRouter.ServeRequest(ctx, req, rsp) 36 } 37 return s.Proxy.ServeRequest(ctx, req, rsp) 38 } 39 40 func New(name string, p proxy.Proxy) *Server { 41 // only register this once 42 once.Do(func() { 43 server.DefaultRouter.Handle( 44 // inject the debug handler 45 server.DefaultRouter.NewHandler( 46 handler.NewHandler(client.DefaultClient), 47 server.InternalHandler(true), 48 ), 49 ) 50 }) 51 52 return &Server{ 53 Name: name, 54 Proxy: p, 55 } 56 }