micro/util/mux/mux.go

57 lines
1.2 KiB
Go
Raw Normal View History

2019-08-13 17:21:51 +03:00
// Package mux provides proxy muxing
package mux
import (
"context"
"sync"
2020-05-24 20:45:57 +03:00
"github.com/micro/go-micro/v2/client"
"github.com/micro/go-micro/v2/debug/service/handler"
"github.com/micro/go-micro/v2/proxy"
"github.com/micro/go-micro/v2/server"
2019-08-13 17:21:51 +03:00
)
2019-08-15 10:47:32 +03:00
// Server is a proxy muxer that incudes the use of the DefaultHandler
2019-08-13 17:21:51 +03:00
type Server struct {
// name of service
Name string
// Proxy handler
Proxy proxy.Proxy
}
var (
once sync.Once
)
func (s *Server) ProcessMessage(ctx context.Context, msg server.Message) error {
if msg.Topic() == s.Name {
return server.DefaultRouter.ProcessMessage(ctx, msg)
}
return s.Proxy.ProcessMessage(ctx, msg)
}
2019-08-13 17:21:51 +03:00
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(
2020-01-30 01:31:57 +03:00
// inject the debug handler
server.DefaultRouter.NewHandler(
2020-05-24 20:45:57 +03:00
handler.NewHandler(client.DefaultClient),
server.InternalHandler(true),
),
2019-08-13 17:21:51 +03:00
)
})
return &Server{
2019-08-15 10:47:32 +03:00
Name: name,
2019-08-13 17:21:51 +03:00
Proxy: p,
}
}