From 339a5a68ac537265703b9d2bd13d705b75193b36 Mon Sep 17 00:00:00 2001 From: "xinfan.wu" <13708123240@163.com> Date: Mon, 2 Dec 2024 09:27:04 +0800 Subject: [PATCH] feat:add keepalive config and pass through to grpc dial option (#87) * feat:add keepalive config to pass through to GRPC client config in dubbogo * feat:add keepalive config to pass through to GRPC client --- pkg/common/constant/constant.go | 4 +++- pkg/config/config.go | 16 ++++++++++++++++ pkg/config/config_test.go | 1 + pkg/triple/dubbo3_client.go | 9 +++++++++ pkg/triple/dubbo3_server.go | 3 +-- 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index e190785..32b383e 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -17,7 +17,9 @@ package constant -import "time" +import ( + "time" +) // transfer const ( diff --git a/pkg/config/config.go b/pkg/config/config.go index 5a7b670..b01105c 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -19,7 +19,9 @@ package config import ( "time" +) +import ( "github.com/dubbogo/triple/pkg/common/constant" loggerInterface "github.com/dubbogo/triple/pkg/common/logger" "github.com/dubbogo/triple/pkg/common/logger/default_logger" @@ -47,6 +49,8 @@ type Option struct { GRPCMaxServerSendMsgSize int GRPCMaxCallRecvMsgSize int GRPCMaxServerRecvMsgSize int + GRPCKeepAliveTime time.Duration + GRPCKeepAliveTimeout time.Duration // tracing JaegerAddress string @@ -207,6 +211,18 @@ func WithGRPCMaxServerRecvMessageSize(maxServerRecvMsgSize int) OptionFunction { } } +func WithGRPCKeepAliveTimeInterval(keepAliveInterval time.Duration) OptionFunction { + return func(o *Option) { + o.GRPCKeepAliveTime = keepAliveInterval + } +} + +func WithGRPCKeepAliveTimeout(keepAliveTimeout time.Duration) OptionFunction { + return func(o *Option) { + o.GRPCKeepAliveTimeout = keepAliveTimeout + } +} + func WithJaegerConfig(address, serviceName string, useAgent bool) OptionFunction { return func(o *Option) { o.JaegerAddress = address diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 3334ab6..017eff7 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -21,6 +21,7 @@ import ( "testing" "time" ) + import ( "github.com/stretchr/testify/assert" ) diff --git a/pkg/triple/dubbo3_client.go b/pkg/triple/dubbo3_client.go index dc58fc5..155a595 100644 --- a/pkg/triple/dubbo3_client.go +++ b/pkg/triple/dubbo3_client.go @@ -36,6 +36,7 @@ import ( "github.com/dubbogo/grpc-go/encoding/msgpack" "github.com/dubbogo/grpc-go/encoding/raw_proto" "github.com/dubbogo/grpc-go/encoding/tools" + "github.com/dubbogo/grpc-go/keepalive" "github.com/dubbogo/grpc-go/status" "github.com/opentracing/opentracing-go" @@ -110,6 +111,14 @@ func NewTripleClient(impl interface{}, opt *config.Option) (*TripleClient, error defaultCallOpts = append(defaultCallOpts, grpc.MaxCallRecvMsgSize(opt.GRPCMaxCallRecvMsgSize)) } dialOpts = append(dialOpts, grpc.WithDefaultCallOptions(defaultCallOpts...)) + //keepalive + if opt.GRPCKeepAliveTime != 0 && opt.GRPCKeepAliveTimeout != 0 { + dialOpts = append(dialOpts, grpc.WithKeepaliveParams(keepalive.ClientParameters{ + Time: opt.GRPCKeepAliveTime, + Timeout: opt.GRPCKeepAliveTimeout, + PermitWithoutStream: true, + })) + } // codec if opt.CodecType == constant.PBCodecName { diff --git a/pkg/triple/dubbo3_server.go b/pkg/triple/dubbo3_server.go index bb6c6b0..2d3db2e 100644 --- a/pkg/triple/dubbo3_server.go +++ b/pkg/triple/dubbo3_server.go @@ -32,6 +32,7 @@ import ( hessian "github.com/apache/dubbo-go-hessian2" "github.com/dubbogo/grpc-go" + "github.com/dubbogo/grpc-go/credentials" "github.com/dubbogo/grpc-go/credentials/insecure" "github.com/dubbogo/grpc-go/encoding" hessianGRPCCodec "github.com/dubbogo/grpc-go/encoding/hessian" @@ -40,8 +41,6 @@ import ( "github.com/dubbogo/grpc-go/encoding/raw_proto" perrors "github.com/pkg/errors" - - "github.com/dubbogo/grpc-go/credentials" ) import (