accept Listen option in grpc server (#1201)
This commit is contained in:
parent
816bfec4a0
commit
471d2205bd
24
grpc.go
24
grpc.go
@ -171,6 +171,17 @@ func (g *grpcServer) getGrpcOptions() []grpc.ServerOption {
|
|||||||
return opts
|
return opts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *grpcServer) getListener() net.Listener {
|
||||||
|
if g.opts.Context != nil {
|
||||||
|
if v := g.opts.Context.Value(netListener{}); v != nil {
|
||||||
|
if l, ok := v.(net.Listener); ok {
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (g *grpcServer) handler(srv interface{}, stream grpc.ServerStream) error {
|
func (g *grpcServer) handler(srv interface{}, stream grpc.ServerStream) error {
|
||||||
if g.wg != nil {
|
if g.wg != nil {
|
||||||
g.wg.Add(1)
|
g.wg.Add(1)
|
||||||
@ -788,9 +799,16 @@ func (g *grpcServer) Start() error {
|
|||||||
config := g.Options()
|
config := g.Options()
|
||||||
|
|
||||||
// micro: config.Transport.Listen(config.Address)
|
// micro: config.Transport.Listen(config.Address)
|
||||||
ts, err := net.Listen("tcp", config.Address)
|
var ts net.Listener
|
||||||
if err != nil {
|
|
||||||
return err
|
if l := g.getListener(); l != nil {
|
||||||
|
ts = l
|
||||||
|
} else {
|
||||||
|
var err error
|
||||||
|
ts, err = net.Listen("tcp", config.Address)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Logf("Server [grpc] Listening on %s", ts.Addr().String())
|
log.Logf("Server [grpc] Listening on %s", ts.Addr().String())
|
||||||
|
16
options.go
16
options.go
@ -3,6 +3,7 @@ package grpc
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"net"
|
||||||
|
|
||||||
"github.com/micro/go-micro/v2/broker"
|
"github.com/micro/go-micro/v2/broker"
|
||||||
"github.com/micro/go-micro/v2/codec"
|
"github.com/micro/go-micro/v2/codec"
|
||||||
@ -14,9 +15,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type codecsKey struct{}
|
type codecsKey struct{}
|
||||||
type tlsAuth struct{}
|
|
||||||
type maxMsgSizeKey struct{}
|
|
||||||
type grpcOptions struct{}
|
type grpcOptions struct{}
|
||||||
|
type netListener struct{}
|
||||||
|
type maxMsgSizeKey struct{}
|
||||||
|
type tlsAuth struct{}
|
||||||
|
|
||||||
// gRPC Codec to be used to encode/decode requests for a given content type
|
// gRPC Codec to be used to encode/decode requests for a given content type
|
||||||
func Codec(contentType string, c encoding.Codec) server.Option {
|
func Codec(contentType string, c encoding.Codec) server.Option {
|
||||||
@ -43,6 +45,16 @@ func AuthTLS(t *tls.Config) server.Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Listener specifies the net.Listener to use instead of the default
|
||||||
|
func Listener(l net.Listener) server.Option {
|
||||||
|
return func(o *server.Options) {
|
||||||
|
if o.Context == nil {
|
||||||
|
o.Context = context.Background()
|
||||||
|
}
|
||||||
|
o.Context = context.WithValue(o.Context, netListener{}, l)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Options to be used to configure gRPC options
|
// Options to be used to configure gRPC options
|
||||||
func Options(opts ...grpc.ServerOption) server.Option {
|
func Options(opts ...grpc.ServerOption) server.Option {
|
||||||
return func(o *server.Options) {
|
return func(o *server.Options) {
|
||||||
|
Loading…
Reference in New Issue
Block a user