## grpc-registry-go
具体例子请参考: [grpc-registry-go/examples/helloworld](https://github.com/charlesxs/grpc-registry-go/tree/master/examples/helloworld)
## Overview
grpc-registry-go 基于grpc-go之上封装了注册中心的功能,支持基于健康检查的自动上下线。
grpc-registry-go 是以应用为维度的服务注册和服务发现,当前实现了etcd 方式的服务注册和服务发现。
如果要实现其他类型的registry, 只需要实现 IRegistry 和 IRegistryFactory 两个接口即可, 如果要实现其他类型的服务发现, 只需要实现 IConnFactory 接口即可
## Getting started
### Server端
1. 配置server端 config (server_config.yaml)
> 最小化配置, 更多配置请查看 [grpc-registry-go/server/server_config.go](https://github.com/charlesxs/grpc-registry-go/blob/master/config/server_config.go)
```yaml
app_name: testApp
port: 8888
schema: etcd
etcd_registry_config:
endpoints:
- 'etcd.server.addr:2379'
```
2. protobuf声明一个rpc 服务,并暴露服务端 stub
> example 定义[grpc-registry-go/examples/hellworld/stub/hello.proto](https://github.com/charlesxs/grpc-registry-go/blob/master/examples/helloworld/stub/hello.proto)
```protobuf
syntax = "proto3";
package hello;
option go_package = "demo/hello";
service Greeter {
rpc SayHello(HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
```
3. 编译 protobuf
```shell
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative helloworld/stub/hello.proto
```
4. 业务代码
```go
type greeterServiceImpl struct {
hello.UnimplementedGreeterServer
}
func (g *greeterServiceImpl) SayHello(ctx context.Context, in *hello.HelloRequest) (*hello.HelloReply, error) {
log.Printf("received request: %s\n", in.GetName())
return &hello.HelloReply{Message: "Hello " + in.GetName()}, nil
}
func main() {
// 初始化config
cfg := ....
// 初始化 gserver
gs, err := gserver.New(cfg).Build()
if err != nil {
log.Fatalln(err)
}
// 注册服务
hello.RegisterGreeterServer(gs.Server(), &greeterServiceImpl{})
// gserver run
log.Fatalln(gs.Run())
}
```
### Client端
1. 配置client端config (client_config.yaml)
> 最小化配置,更多配置请查看 [grpc-registry-go/config/client_config.go](https://github.com/charlesxs/grpc-registry-go/blob/master/config/client_config.go)
```yaml
servers_discovery:
- server_app: testApp
schema: etcd
etcd_config:
endpoints:
- 'etcd.server.addr:2379'
```
2. 业务代码
```go
func main() {
// 初始化config
cfg := ....
// 初始化 gclient
c, err := gclient.New(cfg).Build()
if err != nil {
log.Fatalln(err)
}
greeterClient := hello.NewGreeterClient(c.GetConn("serverApp"))
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, err := greeterClient.SayHello(ctx, &hello.HelloRequest{Name: "charles"})
if err != nil {
log.Fatalln(err)
}
log.Println("Greeting: ", r)
}
```
## 指南
### gserver
特性:
```go
1. WithHealthcheck(checker healthcheck.IHealthChecker)
支持业务健康检查, 业务只需要实现 healthcheck.IHealthChecker 接口即可, 当IsHealth() 返回为true时代表业务正常,gserver便将自己注册到注册中心
当 IsHealtch() 返回false时代表业务不正常, gserver便将自己从应用中心债除掉.
默认没有healthcheck, server启动便将自己注册到注册中心
2. WithServerOptions(options ...grpc.ServerOption)
指定自定义的grpc.ServerOption, 默认的grpc.ServerOption有 grpc.ConnectionTimeout(60 * time.Second), 60s连接超时
3. WithLogger(logger *zap.Logger)
指定logger
```
### gclient
特性:
```go
1. WithDialOptions(options ...grpc.DialOption)
指定自定义的grpc.DialOption, 默认的DialOption 有
// 默认通讯不指定证书
grpc.WithTransportCredentials(insecure.NewCredentials())
// 默认的负载均衡策略是轮询, 若要更换策略,可以在client config的BalancePolicy中指定
grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`)
注意: 通常不要自己指定resolvers grpc.WithResolvers(), resolver和对应的注册中心成对出现, gclient中已经默认实现了
2. WithLogger(logger *zap.Logger)
指定logger
3. WithContext(ctx context.Context)
指定 context, 此context会被用于 grpc.DialContext(ctx, ...)
```
生瓜蛋子
- 粉丝: 3926
- 资源: 7441
最新资源
- 基于自抗扰控制器ADRC的永磁同步电机FOC 1.转速环采用ADRC,和传统PI进行对比来分析ADRC控制性能的优越性 对ADRC中的ESO进行改进,进一步提高了ADRC性能; 2.三种速度控制器进
- 基于Python实现对房价的预测源码+全部数据+报告文档(期末大作业).zip
- openssl-1.1.1l.zip
- 基于Python实现对房价的预测源码+全部数据(期末大作业).zip
- 《Spark大数据分析源码解析与实例详解》图书配套实例资源.zip
- 一个非常小巧,绿色, 好用 的发包工具,支持tcp/udp, 支持服务端和客户端,支持自定义 发包内容
- 基于线性扩张状态观测器和滑模观测器的永磁同步电机无感FOC 1.采用线性扩张状态观测器和滑模观测器实现中高速下无感FOC;两种不同的无感算法进行对比;锁相环技术标幺化处理提取转子位置信息; 2.转速环
- 一个大数据实时流处理日志分析系统 Demo.zip
- comsol变质量注浆理论,根据魏建平《裂隙煤体注浆浆液扩散规律及变质量渗流模型研究》,考虑不同注浆压力,进行了不同压力下的注浆封堵模拟,沉积颗粒浓度随着注浆压力增大会变大,渗透率负相关 模型 模型
- 关于wlinux定制系统安装系统日志syslog、net-tools、chroynd等系统工具说明
- 一个开源的全栈大数据项目,主要包含实时数据采集,机器学习,大数据处理,前端可视化.zip
- Chinese.isl
- 抖音直播录制免费软件,直播流录制,自动检测开播
- 一个轻量级的大屏数据展示方案.zip
- 污水处理出水总磷预测中的正则化回声状态网络研究
- 基于LADRC-非线性ESO的永磁同步电机无感FOC 电机参数采用袁磊老师书上的 1.采用非线性扩张状态观测器ESO实现中高速下无感FOC;对锁相环技术标幺化处理提取转子位置信息; 2.转速环采用线性
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈