From c975468374886a5bb5c16aa7d5b286cac46f920a Mon Sep 17 00:00:00 2001 From: "felix.fengmin" Date: Wed, 27 Sep 2023 22:13:36 +0800 Subject: [PATCH] feature: enable the percentage limit feature provided by v0.7.2 --- README.md | 30 ++++++++++++++++++++---------- README_CN.md | 30 ++++++++++++++++++++---------- client/retry.go | 14 ++++++++------ go.mod | 6 +++--- go.sum | 12 ++++++------ 5 files changed, 57 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 466691d..5061611 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ [中文](https://github.com/kitex-contrib/config-nacos/blob/main/README_CN.md) -Nacos as config centre. +Nacos as config centre for service governance. -## How to use? +## Usage ### Basic @@ -143,10 +143,12 @@ Provide the mechanism to custom the nacos parameter `vo.ConfigParam`. |----|----| |connection_limit| Maximum concurrent connections | |qps_limit| Maximum request number every 100ms | + Example: -``` -configDataID: ServiceName.limit +> configDataID: ServiceName.limit + +```json { "connection_limit": 100, "qps_limit": 2000 @@ -168,8 +170,10 @@ Note: |failure_policy.backoff_policy| Can only be set one of `fixed` `none` `random` | Example: -``` -configDataId: ClientName.ServiceName.retry + +> configDataId: ClientName.ServiceName.retry + +```json { "*": { "enable": true, @@ -215,8 +219,10 @@ Note: retry.Container has built-in support for specifying the default configurat [JSON Schema](https://github.com/cloudwego/kitex/blob/develop/pkg/rpctimeout/item_rpc_timeout.go#L42) Example: -``` -configDataId: ClientName.ServiceName.rpc_timeout + +> configDataId: ClientName.ServiceName.rpc_timeout + +```json { "*": { "conn_timeout_ms": 100, @@ -237,10 +243,14 @@ Note: The circuit breaker implementation of kitex does not currently support cha |Variable|Introduction| |----|----| |min_sample| Minimum statistical sample number| + Example: -``` + The echo method uses the following configuration (0.3, 100) and other methods use the global default configuration (0.5, 200) -configDataId: `ClientName.ServiecName.circuit_break` + +> configDataId: `ClientName.ServiecName.circuit_break` + +```json { "echo": { "enable": true, diff --git a/README_CN.md b/README_CN.md index 9265870..5dca5e9 100644 --- a/README_CN.md +++ b/README_CN.md @@ -2,9 +2,9 @@ [English](https://github.com/kitex-contrib/config-nacos/blob/main/README.md) -使用 **nacos** 作为 **Kitex** 的配置中心 +使用 **nacos** 作为 **Kitex** 的服务治理配置中心 -## 这个项目应当如何使用? +## 用法 ### 基本使用 @@ -144,8 +144,10 @@ func main() { |qps_limit|每 100ms 内的最大请求数量| 例子: -``` -configDataID: ServiceName.limit + +> configDataID: ServiceName.limit + +```json { "connection_limit": 100, "qps_limit": 2000 @@ -167,8 +169,10 @@ configDataID: ServiceName.limit |failure_policy.backoff_policy| 可以设置的策略: `fixed` `none` `random` | 例子: -``` -configDataId: ClientName.ServiceName.retry + +> configDataId: ClientName.ServiceName.retry + +```json { "*": { "enable": true, @@ -214,8 +218,10 @@ configDataId: ClientName.ServiceName.retry [JSON Schema](https://github.com/cloudwego/kitex/blob/develop/pkg/rpctimeout/item_rpc_timeout.go#L42) 例子: -``` -configDataId: ClientName.ServiceName.rpc_timeout + +> configDataId: ClientName.ServiceName.rpc_timeout + +```json { "*": { "conn_timeout_ms": 100, @@ -236,10 +242,14 @@ configDataId: ClientName.ServiceName.rpc_timeout |参数|说明| |----|----| |min_sample| 最小的统计样本数| + 例子: -``` + echo 方法使用下面的配置(0.3、100),其他方法使用全局默认配置(0.5、200) -configDataId: `ClientName.ServiceName.circuit_break` + +> configDataId: `ClientName.ServiceName.circuit_break` + +```json { "echo": { "enable": true, diff --git a/client/retry.go b/client/retry.go index 05820e0..79929c4 100644 --- a/client/retry.go +++ b/client/retry.go @@ -15,13 +15,13 @@ package client import ( - "github.com/kitex-contrib/config-nacos/nacos" - "github.com/kitex-contrib/config-nacos/utils" - "github.com/nacos-group/nacos-sdk-go/vo" - "github.com/cloudwego/kitex/client" "github.com/cloudwego/kitex/pkg/klog" "github.com/cloudwego/kitex/pkg/retry" + "github.com/nacos-group/nacos-sdk-go/vo" + + "github.com/kitex-contrib/config-nacos/nacos" + "github.com/kitex-contrib/config-nacos/utils" ) // WithRetryPolicy sets the retry policy from nacos configuration center. @@ -37,8 +37,10 @@ func WithRetryPolicy(dest, src string, nacosClient nacos.Client, panic(err) } + rc := initRetryContainer(param, dest, nacosClient) return []client.Option{ - client.WithRetryContainer(initRetryContainer(param, dest, nacosClient)), + client.WithRetryContainer(rc), + client.WithCloseCallbacks(rc.Close), client.WithCloseCallbacks(func() error { // cancel the configuration listener when client is closed. return nacosClient.DeregisterConfig(param) @@ -49,7 +51,7 @@ func WithRetryPolicy(dest, src string, nacosClient nacos.Client, func initRetryContainer(param vo.ConfigParam, dest string, nacosClient nacos.Client, ) *retry.Container { - retryContainer := retry.NewRetryContainer() + retryContainer := retry.NewRetryContainerWithPercentageLimit() ts := utils.ThreadSafeSet{} diff --git a/go.mod b/go.mod index 7eff699..3c6f0cc 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/kitex-contrib/config-nacos go 1.19 require ( - github.com/cloudwego/kitex v0.7.1 + github.com/cloudwego/kitex v0.7.2 github.com/cloudwego/kitex-examples v0.2.0 github.com/nacos-group/nacos-sdk-go v1.1.4 github.com/stretchr/testify v1.8.2 @@ -22,9 +22,9 @@ require ( github.com/cloudwego/configmanager v0.2.0 // indirect github.com/cloudwego/dynamicgo v0.1.3 // indirect github.com/cloudwego/fastpb v0.0.4 // indirect - github.com/cloudwego/frugal v0.1.7 // indirect + github.com/cloudwego/frugal v0.1.8 // indirect github.com/cloudwego/localsession v0.0.2 // indirect - github.com/cloudwego/netpoll v0.4.1 // indirect + github.com/cloudwego/netpoll v0.5.0 // indirect github.com/cloudwego/thriftgo v0.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fatih/structtag v1.2.0 // indirect diff --git a/go.sum b/go.sum index c2d11a7..96a9599 100644 --- a/go.sum +++ b/go.sum @@ -475,16 +475,16 @@ github.com/cloudwego/fastpb v0.0.4 h1:/ROVVfoFtpfc+1pkQLzGs+azjxUbSOsAqSY4tAAx4m github.com/cloudwego/fastpb v0.0.4/go.mod h1:/V13XFTq2TUkxj2qWReV8MwfPC4NnPcy6FsrojnsSG0= github.com/cloudwego/frugal v0.1.3/go.mod h1:b981ViPYdhI56aFYsoMjl9kv6yeqYSO+iEz2jrhkCgI= github.com/cloudwego/frugal v0.1.6/go.mod h1:9ElktKsh5qd2zDBQ5ENhPSQV7F2dZ/mXlr1eaZGDBFs= -github.com/cloudwego/frugal v0.1.7 h1:Ggyk8mk0WrhBlM4g4RJxdOcVWJl/Hxbd8NJ19J8My6c= -github.com/cloudwego/frugal v0.1.7/go.mod h1:3VECBCSiTYwm3QApqHXjZB9NDH+8hUw7txxlr+6pPb4= +github.com/cloudwego/frugal v0.1.8 h1:MaJDRfvSnepsbUyMlQA9cySJ2+Y/we+r57tv5txx3sE= +github.com/cloudwego/frugal v0.1.8/go.mod h1:F0mLIWHymuQgh6r8N0owTA/ARv1B4SOiKa88tpOAfEU= github.com/cloudwego/kitex v0.0.4/go.mod h1:EIjPJ4Dom2ornk7xDCdKpUpOnf4Tulevimh4Tn05OGc= github.com/cloudwego/kitex v0.2.0/go.mod h1:1p4rtGIIiFZMOePYbSPgLkIhdhdfhEtVOJSti/k9vK4= github.com/cloudwego/kitex v0.3.2/go.mod h1:/XD07VpUD9VQWmmoepASgZ6iw//vgWikVA9MpzLC5i0= github.com/cloudwego/kitex v0.4.4/go.mod h1:3FcH5h9Qw+dhRljSzuGSpWuThttA8DvK0BsL7HUYydo= github.com/cloudwego/kitex v0.5.0/go.mod h1:yhw7XikNVG4RstmlQAidBuxMlZYpIiCLsDU8eHPGEMo= github.com/cloudwego/kitex v0.6.1/go.mod h1:zI1GBrjT0qloTikcCfQTgxg3Ws+yQMyaChEEOcGNUvA= -github.com/cloudwego/kitex v0.7.1 h1:GbCsJ+zDOCsjHaqXVLLD6QIHqDnKPqefqU3+QAOhclg= -github.com/cloudwego/kitex v0.7.1/go.mod h1:TU0FRxTH26XpbR7zm063O/OfqSszVlQvM1eGJES2A4E= +github.com/cloudwego/kitex v0.7.2 h1:lF+Yb058k+91C4dLCvG7YzcoK4CRlV15mltl5WZIbek= +github.com/cloudwego/kitex v0.7.2/go.mod h1:56xuO0DCgKwOMv8NjAs/ooDe1Zb9W8iMKiw04Wv0o7Q= github.com/cloudwego/kitex-examples v0.2.0 h1:77PXV+5q5OCKE38q2DVvHO7ePemtNapwnX+n6zaVSjo= github.com/cloudwego/kitex-examples v0.2.0/go.mod h1:jmqlyPgALXoYXiZwWJSpzb8wEycu9PIIyRRs2cN9OJs= github.com/cloudwego/localsession v0.0.2 h1:N9/IDtCPj1fCL9bCTP+DbXx3f40YjVYWcwkJG0YhQkY= @@ -497,8 +497,8 @@ github.com/cloudwego/netpoll v0.2.4/go.mod h1:1T2WVuQ+MQw6h6DpE45MohSvDTKdy2DlzC github.com/cloudwego/netpoll v0.3.1/go.mod h1:1T2WVuQ+MQw6h6DpE45MohSvDTKdy2DlzCx2KsnPI4E= github.com/cloudwego/netpoll v0.3.2/go.mod h1:xVefXptcyheopwNDZjDPcfU6kIjZXZ4nY550k1yH9eQ= github.com/cloudwego/netpoll v0.4.0/go.mod h1:xVefXptcyheopwNDZjDPcfU6kIjZXZ4nY550k1yH9eQ= -github.com/cloudwego/netpoll v0.4.1 h1:/pGsY7Rs09KqEXEniB9fcsEWfi1iY+66bKUO3/NO6hc= -github.com/cloudwego/netpoll v0.4.1/go.mod h1:xVefXptcyheopwNDZjDPcfU6kIjZXZ4nY550k1yH9eQ= +github.com/cloudwego/netpoll v0.5.0 h1:oRrOp58cPCvK2QbMozZNDESvrxQaEHW2dCimmwH1lcU= +github.com/cloudwego/netpoll v0.5.0/go.mod h1:xVefXptcyheopwNDZjDPcfU6kIjZXZ4nY550k1yH9eQ= github.com/cloudwego/netpoll-http2 v0.0.4/go.mod h1:iFr5SzJCXIYgBg0ubL0fZiCQ6W36s9p0KjXpV04lmoY= github.com/cloudwego/netpoll-http2 v0.0.6/go.mod h1:+bjPyu2Cd4GDzKa0IegPgp1hjMjpZ6/kXTsSjIsmUk8= github.com/cloudwego/thriftgo v0.1.2/go.mod h1:LzeafuLSiHA9JTiWC8TIMIq64iadeObgRUhmVG1OC/w=