ocelot+etcd发现服务

 目前大家很多使用consul.其实etcd也可以做到只是没有直接集成进去.

 etcd作为服务注册发现中心 ,其原理一样.已经有相关包做了封装.

理论上,etcd的服务发现更快,和consul不同的是健康检查,consul主动获取提供的检查地址定时检查 etcd则是服务自己发送心跳包.

服务设置时间周期 定时向etcd服务发送心跳,一旦超时服务将立即从etcd中移除。这里主要是使用了etcd的租约机制.

ocelot则会直接获取etcd中服务状态,不是定时获取服务而是监听服务状态,可以及时更新服务。这里主要使用了etcd的watch机制。能瞬间被推送信息。

etcd还有其它功能方便需要扩展,这里就扩展了存储机制。

版本高的替换否则不能替换。

getcondig(string file)获取配置。

addconfig(string file,string version,string name) 保存配置文件 

web服务使用,引入nuget  Etcd.Register

//配置etcd地址,只需要一个可用即可,内部会刷新集群地址
builder.Services.AddSingleton<EtcdClientConfiguration>(new EtcdClientConfiguration("127.0.0.1", 2379, ""));

//注册本服务地址
builder.Services.AddEtcd().AddEtcdServiceRegistration(p =>
{
    p.Port = 4002;
    p.Address = "127.0.0.1";
    p.Name = "homepage";
    p.Check = new Etcd.Register.AgentCheckRegistration
    {
        TTL = 10,
        ServiceID = "A2"
    };
    p.ID = Guid.NewGuid().ToString();
});
var app = builder.Build();

基本保持了consul的参数。

Ocelot项目中使用,引入nuget Ocelot.Provider.Etcd.Cluster

builder.Services.AddOcelot(builder.Configuration).AddEtcd().AddPolly(); //加 etcd服务 polly

配置文件中需要配置etcd访问地址,只需要一个可访问的地址,etcd集群会内部获取地址。etcd的服务时主动上报,检查时间就无用了。

"ServiceDiscoveryProvider": {
      "Host": "localhost", // Consul Service IP
      "Port": 2379, // Consul Service Port ;nginx代理集群时就是ngix端口
      // "Port": 8500 // Consul Service Port ;nginx代理集群时就是ngix端口
      "Type": "Etcd",
      //"Type": "PollConsul",
    //  "PollingInterval": 100 //健康检查时间端
    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值