Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(limiter): implement the limiter config #4

Merged
merged 10 commits into from
Aug 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 77 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,43 +10,109 @@ Nacos as config centre.

#### Server

TODO
```go
import (
"context"
"log"

"github.com/cloudwego/kitex-examples/kitex_gen/api"
"github.com/cloudwego/kitex-examples/kitex_gen/api/echo"
"github.com/cloudwego/kitex/pkg/klog"
"github.com/cloudwego/kitex/pkg/rpcinfo"
"github.com/cloudwego/kitex/server"
"github.com/kitex-contrib/config-nacos/nacos"
nacosserver "github.com/kitex-contrib/config-nacos/server"
)

var _ api.Echo = &EchoImpl{}

// EchoImpl implements the last service interface defined in the IDL.
type EchoImpl struct{}

// Echo implements the Echo interface.
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
klog.Info("echo called")
return &api.Response{Message: req.Message}, nil
}

func main() {
nacosClient, err := nacos.DefaultClient()
if err != nil {
panic(err)
}
serviceName := "echo"

opts := []server.Option{
server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: serviceName}),
}

opts = append(opts, nacosserver.NewSuite(serviceName, nacosClient).Options()...)

svr := echo.NewServer(
new(EchoImpl),
opts...,
)
if err := svr.Run(); err != nil {
log.Println("server stopped with error:", err)
} else {
log.Println("server stopped")
}
}
```

#### Client

```go
import (
// ...
"context"
"log"

"github.com/cloudwego/kitex-examples/kitex_gen/api"
"github.com/cloudwego/kitex-examples/kitex_gen/api/echo"
"github.com/cloudwego/kitex/client"
"github.com/cloudwego/kitex/pkg/klog"
nacosclient "github.com/kitex-contrib/config-nacos/client"
"github.com/kitex-contrib/config-nacos/nacos"
// ...
"github.com/nacos-group/nacos-sdk-go/vo"
)

func main() {
// ...
klog.SetLevel(klog.LevelDebug)

nacosClient, err := nacos.DefaultClient()
if err != nil {
panic(err)
}

fn := func(cp *vo.ConfigParam) {
cp.Type = vo.TEXT
klog.Infof("nacos config %v", cp)
}

opts := []client.Option{
client.WithHostPorts("0.0.0.0:8888"),
client.WithMiddleware(mymiddleware.CommonMiddleware),
client.WithMiddleware(mymiddleware.ClientMiddleware),
//client.WithResolver(r),
}

opts = append(opts, nacosclient.NewSuite("echo", "test", nacosClient, fn).Options()...)
serviceName := "echo"
clientName := "test"

opts = append(opts, nacosclient.NewSuite(serviceName, clientName, nacosClient, fn).Options()...)

client, err := echo.NewClient(
"echo",
serviceName,
opts...,
)
// ...
if err != nil {
log.Fatal(err)
}
for {
req := &api.Request{Message: "my request"}
resp, err := client.Echo(context.Background(), req)
if err != nil {
klog.Errorf("take request error: %v", err)
} else {
klog.Infof("receive response %v", resp)
}
}
}
```

Expand Down
90 changes: 80 additions & 10 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,41 +8,111 @@

### 基本使用

#### 服务端

```go
import (
"context"
"log"

"github.com/cloudwego/kitex-examples/kitex_gen/api"
"github.com/cloudwego/kitex-examples/kitex_gen/api/echo"
"github.com/cloudwego/kitex/pkg/klog"
"github.com/cloudwego/kitex/pkg/rpcinfo"
"github.com/cloudwego/kitex/server"
"github.com/kitex-contrib/config-nacos/nacos"
nacosserver "github.com/kitex-contrib/config-nacos/server"
)

var _ api.Echo = &EchoImpl{}

// EchoImpl implements the last service interface defined in the IDL.
type EchoImpl struct{}

// Echo implements the Echo interface.
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
klog.Info("echo called")
return &api.Response{Message: req.Message}, nil
}

func main() {
nacosClient, err := nacos.DefaultClient()
if err != nil {
panic(err)
}
serviceName := "echo"

opts := []server.Option{
server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: serviceName}),
}

opts = append(opts, nacosserver.NewSuite(serviceName, nacosClient).Options()...)

svr := echo.NewServer(
new(EchoImpl),
opts...,
)
if err := svr.Run(); err != nil {
log.Println("server stopped with error:", err)
} else {
log.Println("server stopped")
}
}
```

#### 客户端

```go
import (
// ...
"context"
"log"

"github.com/cloudwego/kitex-examples/kitex_gen/api"
"github.com/cloudwego/kitex-examples/kitex_gen/api/echo"
"github.com/cloudwego/kitex/client"
"github.com/cloudwego/kitex/pkg/klog"
nacosclient "github.com/kitex-contrib/config-nacos/client"
"github.com/kitex-contrib/config-nacos/nacos"
// ...
"github.com/nacos-group/nacos-sdk-go/vo"
)

func main() {
// ...
klog.SetLevel(klog.LevelDebug)

nacosClient, err := nacos.DefaultClient()
if err != nil {
panic(err)
}

fn := func(cp *vo.ConfigParam) {
cp.Type = vo.TEXT
klog.Infof("nacos config %v", cp)
}

opts := []client.Option{
client.WithHostPorts("0.0.0.0:8888"),
client.WithMiddleware(mymiddleware.CommonMiddleware),
client.WithMiddleware(mymiddleware.ClientMiddleware),
//client.WithResolver(r),
}

opts = append(opts, nacosclient.NewSuite("echo", "test", nacosClient, fn).Options()...)
serviceName := "echo"
clientName := "test"

opts = append(opts, nacosclient.NewSuite(serviceName, clientName, nacosClient, fn).Options()...)

client, err := echo.NewClient(
"echo",
serviceName,
opts...,
)
// ...
if err != nil {
log.Fatal(err)
}
for {
req := &api.Request{Message: "my request"}
resp, err := client.Echo(context.Background(), req)
if err != nil {
klog.Errorf("take request error: %v", err)
} else {
klog.Infof("receive response %v", resp)
}
}
}
```

Expand Down
4 changes: 2 additions & 2 deletions client/client_suite.go → client/suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import (
)

const (
retryConfigName = "retry_config"
retryConfigName = "retry"
rpcTimeoutConfigName = "rpc_timeout"
circuitBreakerConfigName = "cb_config"
circuitBreakerConfigName = "circuit_break"
)

// NacosClientSuite nacos client config suite, configure retry timeout limit and circuitbreak dynamically from nacos.
Expand Down
13 changes: 5 additions & 8 deletions example/client/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,11 @@ import (
"github.com/cloudwego/kitex/pkg/klog"
nacosclient "github.com/kitex-contrib/config-nacos/client"
"github.com/kitex-contrib/config-nacos/nacos"
"github.com/kitex-contrib/registry-nacos/resolver"
"github.com/nacos-group/nacos-sdk-go/vo"
)

func main() {
klog.SetLevel(klog.LevelDebug)
r, err := resolver.NewDefaultNacosResolver()
if err != nil {
panic(err)
}

nacosClient, err := nacos.DefaultClient()
if err != nil {
Expand All @@ -47,13 +42,15 @@ func main() {

opts := []client.Option{
client.WithHostPorts("0.0.0.0:8888"),
client.WithResolver(r),
}

opts = append(opts, nacosclient.NewSuite("echo", "test", nacosClient, fn).Options()...)
serviceName := "echo"
clientName := "test"

opts = append(opts, nacosclient.NewSuite(serviceName, clientName, nacosClient, fn).Options()...)

client, err := echo.NewClient(
"echo",
serviceName,
opts...,
)
if err != nil {
Expand Down
23 changes: 13 additions & 10 deletions example/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,14 @@ package main
import (
"context"
"log"
"time"

"github.com/kitex-contrib/registry-nacos/registry"

"github.com/cloudwego/kitex-examples/kitex_gen/api"
"github.com/cloudwego/kitex-examples/kitex_gen/api/echo"
"github.com/cloudwego/kitex-examples/middleware/mymiddleware"
"github.com/cloudwego/kitex/pkg/klog"
"github.com/cloudwego/kitex/pkg/rpcinfo"
"github.com/cloudwego/kitex/server"
"github.com/kitex-contrib/config-nacos/nacos"
nacosserver "github.com/kitex-contrib/config-nacos/server"
)

var _ api.Echo = &EchoImpl{}
Expand All @@ -38,21 +36,26 @@ type EchoImpl struct{}
// Echo implements the Echo interface.
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
klog.Info("echo called")
time.Sleep(2 * time.Second)
return &api.Response{Message: req.Message}, nil
}

func main() {
r, err := registry.NewDefaultNacosRegistry()
klog.SetLevel(klog.LevelDebug)
nacosClient, err := nacos.DefaultClient()
if err != nil {
panic(err)
}
serviceName := "echo"

opts := []server.Option{
server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: serviceName}),
}

opts = append(opts, nacosserver.NewSuite(serviceName, nacosClient).Options()...)

svr := echo.NewServer(
new(EchoImpl),
server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "echo"}),
server.WithRegistry(r),
server.WithMiddleware(mymiddleware.CommonMiddleware),
server.WithMiddleware(mymiddleware.ServerMiddleware),
opts...,
)
if err := svr.Run(); err != nil {
log.Println("server stopped with error:", err)
Expand Down
5 changes: 2 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ module github.com/kitex-contrib/config-nacos
go 1.19

require (
github.com/cloudwego/kitex v0.6.2-0.20230804065152-067aad9c9eef
github.com/cloudwego/kitex v0.6.2-0.20230825063748-0068e34282a5
github.com/cloudwego/kitex-examples v0.2.0
github.com/kitex-contrib/registry-nacos v0.1.0
github.com/nacos-group/nacos-sdk-go v1.1.4
github.com/stretchr/testify v1.8.2
sigs.k8s.io/yaml v1.3.0
Expand All @@ -26,7 +25,7 @@ require (
github.com/cloudwego/frugal v0.1.7 // indirect
github.com/cloudwego/localsession v0.0.2 // indirect
github.com/cloudwego/netpoll v0.4.1 // indirect
github.com/cloudwego/thriftgo v0.2.13-0.20230804030519-2ce040e1b8ba // 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
github.com/go-errors/errors v1.0.1 // indirect
Expand Down
11 changes: 4 additions & 7 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -482,10 +482,9 @@ github.com/cloudwego/kitex v0.2.0/go.mod h1:1p4rtGIIiFZMOePYbSPgLkIhdhdfhEtVOJSt
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.5.1/go.mod h1:B3oH+MTQ7/wBL3BrCAMlyeyjAqOpi4pRzCvQcXN7RgM=
github.com/cloudwego/kitex v0.6.1/go.mod h1:zI1GBrjT0qloTikcCfQTgxg3Ws+yQMyaChEEOcGNUvA=
github.com/cloudwego/kitex v0.6.2-0.20230804065152-067aad9c9eef h1:TijrLYx5RqH/Q9AXl2pd24+3/ID5jWNvQNJfbphF8Ic=
github.com/cloudwego/kitex v0.6.2-0.20230804065152-067aad9c9eef/go.mod h1:juSMg+Ae9uvch5bET2IdjJpOurx+IPjWQSKLrZyqjCY=
github.com/cloudwego/kitex v0.6.2-0.20230825063748-0068e34282a5 h1:AIEVSRU5aC6Gk+CXpkNMVxyiPZRpKVSfo/pnYyw2Mvo=
github.com/cloudwego/kitex v0.6.2-0.20230825063748-0068e34282a5/go.mod h1:RVWi+MbiPzI0Gi7fz8KZp+zsxB1/pLJZkr4kEwAuX6k=
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=
Expand All @@ -507,8 +506,8 @@ github.com/cloudwego/thriftgo v0.2.4/go.mod h1:8i9AF5uDdWHGqzUhXDlubCjx4MEfKvWXG
github.com/cloudwego/thriftgo v0.2.7/go.mod h1:8i9AF5uDdWHGqzUhXDlubCjx4MEfKvWXGQlMWyR0tM4=
github.com/cloudwego/thriftgo v0.2.8/go.mod h1:dAyXHEmKXo0LfMCrblVEY3mUZsdeuA5+i0vF5f09j7E=
github.com/cloudwego/thriftgo v0.2.11/go.mod h1:dAyXHEmKXo0LfMCrblVEY3mUZsdeuA5+i0vF5f09j7E=
github.com/cloudwego/thriftgo v0.2.13-0.20230804030519-2ce040e1b8ba h1:K+9Hjh6XZvvMN/yCnyErVIMtXoKMS249scXMXVa8qD8=
github.com/cloudwego/thriftgo v0.2.13-0.20230804030519-2ce040e1b8ba/go.mod h1:AvH0iEjvKHu3cdxG7JvhSAaffkS4h2f4/ZxpJbm48W4=
github.com/cloudwego/thriftgo v0.3.0 h1:BBb9hVcqmu9p4iKUP/PSIaDB21Vfutgd7k2zgK37Q9Q=
github.com/cloudwego/thriftgo v0.3.0/go.mod h1:AvH0iEjvKHu3cdxG7JvhSAaffkS4h2f4/ZxpJbm48W4=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
Expand Down Expand Up @@ -706,8 +705,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
github.com/kitex-contrib/monitor-prometheus v0.1.0/go.mod h1:ZHWQOKRHnN1Bw+PgVYeOXmB9l4+k8dlOJ9wx2xz76NU=
github.com/kitex-contrib/obs-opentelemetry v0.2.1/go.mod h1:dlxSosfcSPOmUo0UGkJn2oXzFlR5+4caPKXRdnlLOpc=
github.com/kitex-contrib/obs-opentelemetry/logging/logrus v0.0.0-20230219092456-5e6c84962323/go.mod h1:Eml/0Z+CqgGIPf9JXzLGu+N9NJoy2x5pqypN+hmKArE=
github.com/kitex-contrib/registry-nacos v0.1.0 h1:AmbGeRd1TjGBqp4Jps/G1jDn0XIS6SGSKNPWyaLJ5G4=
github.com/kitex-contrib/registry-nacos v0.1.0/go.mod h1:XnDe4b1xMezdke2n53naF7oikLNjwKQZdh3WrM5VHnQ=
github.com/kitex-contrib/tracer-opentracing v0.0.3/go.mod h1:mprt5pxqywFQxlHb7ugfiMdKbABTLI9YrBYs9WmlK5Q=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.1.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
Expand Down
Loading
Loading