mirror of
https://github.com/linka-cloud/grpc.git
synced 2024-11-24 11:56:26 +00:00
client: add interceptors option
This commit is contained in:
parent
d28f55eb8b
commit
c8ecf58b3e
@ -6,6 +6,7 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials"
|
||||
"google.golang.org/grpc/resolver"
|
||||
@ -36,6 +37,12 @@ func New(opts ...Option) (Client, error) {
|
||||
if !c.opts.secure {
|
||||
c.opts.dialOptions = append(c.opts.dialOptions, grpc.WithInsecure())
|
||||
}
|
||||
if len(c.opts.unaryInterceptors) > 0 {
|
||||
c.opts.dialOptions = append(c.opts.dialOptions, grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(c.opts.unaryInterceptors...)))
|
||||
}
|
||||
if len(c.opts.streamInterceptors) > 0 {
|
||||
c.opts.dialOptions = append(c.opts.dialOptions, grpc.WithStreamInterceptor(grpc_middleware.ChainStreamClient(c.opts.streamInterceptors...)))
|
||||
}
|
||||
if c.opts.addr == "" {
|
||||
c.addr = fmt.Sprintf("%s:///%s", c.opts.registry.String(), c.opts.name)
|
||||
} else if strings.HasPrefix(c.opts.addr, "tcp://"){
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"go.linka.cloud/grpc/interceptors"
|
||||
"go.linka.cloud/grpc/registry"
|
||||
)
|
||||
|
||||
@ -60,6 +61,27 @@ func WithDialOptions(opts ...grpc.DialOption) Option {
|
||||
}
|
||||
}
|
||||
|
||||
func WithInterceptors(i ...interceptors.ClientInterceptors) Option {
|
||||
return func(o *options) {
|
||||
for _, v := range i {
|
||||
o.unaryInterceptors = append(o.unaryInterceptors, v.UnaryClientInterceptor())
|
||||
o.streamInterceptors = append(o.streamInterceptors, v.StreamClientInterceptor())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func WithUnaryInterceptors(i ...grpc.UnaryClientInterceptor) Option {
|
||||
return func(o *options) {
|
||||
o.unaryInterceptors = append(o.unaryInterceptors, i...)
|
||||
}
|
||||
}
|
||||
|
||||
func WithStreamInterceptors(i ...grpc.StreamClientInterceptor) Option {
|
||||
return func(o *options) {
|
||||
o.streamInterceptors = append(o.streamInterceptors, i...)
|
||||
}
|
||||
}
|
||||
|
||||
type options struct {
|
||||
registry registry.Registry
|
||||
name string
|
||||
@ -68,6 +90,9 @@ type options struct {
|
||||
tlsConfig *tls.Config
|
||||
secure bool
|
||||
dialOptions []grpc.DialOption
|
||||
|
||||
unaryInterceptors []grpc.UnaryClientInterceptor
|
||||
streamInterceptors []grpc.StreamClientInterceptor
|
||||
}
|
||||
|
||||
func (o *options) Name() string {
|
||||
|
@ -12,6 +12,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"go.linka.cloud/grpc/client"
|
||||
"go.linka.cloud/grpc/interceptors/defaulter"
|
||||
@ -113,6 +114,10 @@ func main() {
|
||||
client.WithAddress("localhost:9991"),
|
||||
// client.WithRegistry(mdns.NewRegistry()),
|
||||
client.WithSecure(secure),
|
||||
client.WithUnaryInterceptors(func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
|
||||
logger.From(ctx).WithFields("party", "client", "method", method).Info(req)
|
||||
return invoker(ctx, method, req, reply, cc, opts...)
|
||||
}),
|
||||
)
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
|
Loading…
Reference in New Issue
Block a user