限流原理
代码实现
服务端
func startRPCService() {
reg := etcdv3.NewRegistry(func(options *registry.Options) {
options.Addrs = []string{
conf.DefaultConfig.EtcdAddr,
}
etcdv3.Auth(conf.DefaultConfig.EtcdUser,conf.DefaultConfig.EtcdPwd)(options)
})
limit := 2
rate := jujuratelimit.NewBucketWithRate(float64(limit), int64(limit))
service := micro.NewService(
micro.Registry(reg),
micro.Name("go.micro.service.user"),
micro.RegisterTTL(time.Second*10),
micro.RegisterInterval(time.Second*5),
micro.Flags(common.CustomFlags...),
micro.WrapHandler(ratelimit.NewHandlerWrapper(rate,true)),
)
service.Init()
dbproxy.Init(service)
userProto.RegisterUserServiceHandler(service.Server(), new(handler.User))
err := service.Run()
if err != nil {
log.Println(err)
}
}
客户端
var (
userCli userProto.UserService
)
func init(){
conf.InitConfig("./conf/config.json")
reg := etcdv3.NewRegistry(func(op *registry.Options) {
op.Addrs= []string{conf.DefaultConfig.EtcdAddr}
etcdv3.Auth(conf.DefaultConfig.EtcdUser,conf.DefaultConfig.EtcdPwd)(op)
})
service := micro.NewService(
micro.Registry(reg),
micro.Name("go.micro.service.apigw"),
micro.Flags(common.CustomFlags...),
)
service.Init()
cli := service.Client()
userCli = userProto.NewUserService("go.micro.service.user",cli)
}