add a mux package for the proxy

This commit is contained in:
Asim Aslam 2019-08-13 15:21:51 +01:00
parent fedc6be3e6
commit c39591af0e

47
util/mux/mux.go Normal file
View File

@ -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,
}
}