.Net Core 微服务架构基于Ocelot联合Consul实现服务治理、负载均衡、限流、熔断(二)

8 篇文章 2 订阅
2 篇文章 0 订阅

上篇文章我们讲到Ocelot实现Api网关,这篇文章我们一起来实现Ocelot与Consul结合实现服务治理;

一般我的习惯喜欢将所有的Nuget引用放在一个Core基类中,避免版本不一致的情况发生;

创建ServiceCore类库,引用Nuget

Nuget > Install-Package Consul -Version 0.7.2.6

1、创建扩展类实现Consul注册

using Consul;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using System;

namespace ServiceCore.Consul
{
    public static class AppBuilderExtensions
    {
        public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IApplicationLifetime lifetime, ServiceEntity serviceEntity)
        {
            //请求注册的 Consul 地址
            var consulClint = new ConsulClient(c => c.Address = new Uri($"http://{serviceEntity.ConsulIP}:{serviceEntity.ConsulPort}"));

            var httpCheck = new AgentServiceCheck()
            {
                DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册
                Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔,或者称为心跳间隔
                HTTP = $"http://{serviceEntity.IP}:{serviceEntity.Port}/api/health",//健康检查地址
                Timeout = TimeSpan.FromSeconds(5)
            };

            var registration = new AgentServiceRegistration()
            {
                Checks = new[] { httpCheck },
                ID = Guid.NewGuid().ToString(),
                Name = serviceEntity.ServiceName,
                Address = serviceEntity.IP,
                Port = serviceEntity.Port,
                Tags = new[] { $"urlperfix-/{serviceEntity.ServiceName}" }//添加 urlprefix-/servicename 格式的 tag 标签,以便 Fabio 识别
            };

            //服务启动时注册,内部实现其实就是使用 Consul API 进行注册(HttpClient发起)
            consulClint.Agent.ServiceRegister(registration).Wait();

            lifetime.ApplicationStopping.Register(() =>
            {
                //服务停止时取消注册
                consulClint.Agent.ServiceDeregister(registration.ID).Wait();
            });

            return app;
        }
    }
}

并创建ServiceEntity实体

2、修改appsetting.json文件

  • Consul :IP地址及端口号
  • Service :服务名称、IP地址及端口号

3、修改Startup文件

app.UseOcelot().Wait(),基于上篇文章内容;并创建服务健康检查地址,默认启动地址修改为health

最后我们启动Consul服务及项目

 

可以看到项目正常跑起来,我们看一下Consul可视化页面,输入http://localhost:8500

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值