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  }