Skip to content

net6 grpc service registration and discovery with Consul & Etcd

Notifications You must be signed in to change notification settings

DomoYao/GrpcDiscovery

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

NET6 Grpc 服务注册与发现

GrpcDiscovery 是一个基于 NET6 Grpc 服务注册与发现脚类库,可以通过DI注册实现Grpc服务的注册和发现。

服务注册

// Add services to the container.
var serviceRegistryType = builder.Configuration.GetValue<string>("ServiceRegistryType");
if (serviceRegistryType == "Consul")
{

    // Consul 服务DI注册
    builder.Services.AddConsul(builder.Configuration.GetSection("Consul"));
    // 注册服务发现
    builder.Services.AddConsulGrpcClient<GreeterClient>("http://grpc-Test", "grpc-Test");
}
else if (serviceRegistryType == "Etcd")
{
    // Etcd 服务DI注册
    builder.Services.AddEtcd(builder.Configuration.GetSection("Etcd"));
    // 注册服务发现
    //builder.Services.AddEtcdGrpcClient<GreeterClient>("http://GrpcTest");
    builder.Services.AddEtcdGrpcClientAndAddMessageHandler<GreeterClient>("http://GrpcTest");
}

服务发现

// Add services to the container.
var serviceRegistryType = builder.Configuration.GetValue<string>("ServiceRegistryType");
if (serviceRegistryType == "Consul")
{

    // Consul 服务DI注册
    builder.Services.AddConsul(builder.Configuration.GetSection("Consul"));
    // 注册服务发现
    builder.Services.AddConsulGrpcClient<GreeterClient>("http://grpc-Test", "grpc-Test");
}
else if (serviceRegistryType == "Etcd")
{
    // Etcd 服务DI注册
    builder.Services.AddEtcd(builder.Configuration.GetSection("Etcd"));
    // 注册服务发现
    //builder.Services.AddEtcdGrpcClient<GreeterClient>("http://GrpcTest");
    builder.Services.AddEtcdGrpcClientAndAddMessageHandler<GreeterClient>("http://GrpcTest");
}

要实现基于etcd的服务注册,需要以下步骤:

  1. 安装etcd,并运行服务。

  2. 在SDK中引入etcd的客户端依赖,比如etcdv3的Go客户端 go.etcd.io/etcd/clientv3

  3. 编写代码,实现服务的注册和发现。具体来说:

    • 在服务启动时,调用etcd的clientv3.Put()方法将服务信息写入etcd中,可以采用租约机制,确保服务信息在一定时间内保持有效。

    • 在服务发现时,调用etcd的clientv3.Get()方法,获取可用的服务节点列表,并进行负载均衡和路由等操作。

  4. 在Grpc服务中集成服务注册和发现功能,需要自定义Grpc的NameResolver和LoadBalancer。具体来说:

    • NameResolver负责解析服务名称,获取服务地址列表。

    • LoadBalancer负责选择一个可用的服务节点。

以上是基于etcd实现的服务注册和发现的大致流程。具体实现还需要考虑网络通信、错误处理、容错等问题, 建议参考etcd的官方文档和示例代码,或者参考开源的服务注册和发现框架,比如consul或Zookeeper。

About

net6 grpc service registration and discovery with Consul & Etcd

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages