## 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, ...)
```
没有合适的资源?快使用搜索试试~ 我知道了~
grpc-registry-go 基于grpc-go 之上封装了带有注册中心功能的grpc库,支持基于业务健康检测的自动上下线
共32个文件
go:25个
yaml:2个
sum:1个
需积分: 5 0 下载量 129 浏览量
2024-05-23
17:09:56
上传
评论
收藏 27KB ZIP 举报
温馨提示
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
资源推荐
资源详情
资源评论
收起资源包目录
grpc-registry-go 基于grpc-go 之上封装了带有注册中心功能的grpc库,支持基于业务健康检测的自动上下线,只需几行配置就能完成server端的服务注册和client端的服务发现。.zip (32个子文件)
content
go.mod 804B
go.sum 10KB
LICENSE 1KB
examples
helloworld
client
client_config.yaml 127B
main.go 941B
utils
utils.go 262B
stub
hello.proto 241B
hello_grpc.pb.go 3KB
hello.pb.go 4KB
server
server_config.yaml 106B
main.go 1KB
gserver
server_test.go 425B
utils.go 465B
errors.go 90B
server.go 4KB
gclient
conn_factory.go 692B
client_test.go 573B
etcd_conn_factory.go 3KB
errors.go 252B
client.go 3KB
registry
etcd_registry.go 3KB
registry_interface.go 615B
registry_factory.go 216B
errors.go 197B
etcd_registry_factory.go 3KB
constants.go 110B
healthcheck
healthcheck.go 712B
checker_test.go 448B
checker.go 2KB
README.md 4KB
config
server_config.go 2KB
client_config.go 2KB
共 32 条
- 1
资源评论
普通网友
- 粉丝: 3908
- 资源: 7442
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2011至2022年各省、地级市电子商务数据-最新出炉.zip
- 485串口光纤转化器.doc
- 2023-04-06-项目笔记 - 第二百九十七阶段 - 4.4.2.295全局变量的作用域-295 -2025.10.25
- 基于工地的安全帽检测、xml标注、yolo标注两种格式
- java资深开发工程师的google书签 jvm redis es 多线程 java面试题 vue 等干货
- 抖音私信工具智能改写全面升级
- 003调用Kimi实现AI对话,流式内容输出-#py
- 施耐德控制专家 Control Expert DFB Password 解密工具 说明 c#源码
- 人工智能行业:在AI调动的未来成功所需的科技能.pdf
- 汽车转向机构详细设计3D模型
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功