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