add a mux package for the proxy
This commit is contained in:
parent
fedc6be3e6
commit
c39591af0e
47
util/mux/mux.go
Normal file
47
util/mux/mux.go
Normal 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,
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user