.NET CORE集成Consul初探


前言

随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着越来越多的分布式的服务,如何在分布式的系统中对这些服务做协调变成了一个很棘手的问题。今天我们就来看看如何使用C# ,利用开源对分布式服务做协调


提示:以下是本篇文章正文内容,下面案例可供参考

一、实操

1.引入库

安装Consul nuget包
代码如下(示例):

Install-Package Consul

在这里插入图片描述

2.编写Consul扩展类

  1. 新建一个Tool 文件,创建一个ConsulConfigurationEx类,下图所示:
    在这里插入图片描述

注:这里采用方法扩展的方式处理,不懂方法扩展的可以看我 C#中的扩展方法备记 这篇文章

ConsulConfigurationEx代码如下(示例):

  /// <summary>
    /// Consul扩展类
    /// </summary>
    public static class ConsulRegisterEx
    {
        /// <summary>
        /// Configuration 扩展方法ip和端口走的命令窗体控制台, Consul 配置走的是appsettings.json 文件
        /// </summary>
        /// <param name="configuration"></param>
        public static void ConsulRegister(this IConfiguration configuration)
        {

            ConsulClient client = new ConsulClient(
                  (ConsulClientConfiguration c) =>
                  {
                      c.Address = new Uri(configuration["Consul:Address"]); //Consul服务中心地址
                      c.Datacenter = configuration["Consul:DataCenter"]; //指定数据中心,如果未提供,则默认为代理的数据中心。
                }
              );
            String ip = configuration["ip"];//部署到不同服务器的时候不能写成127.0.0.1或者0.0.0.0,因为这是让服务消费者调用的地址
            Int32 port = Int32.Parse(configuration["port"]);
            string checkUrl = configuration["Consul:CheckUrl"];
            client.Agent.ServiceRegister(new AgentServiceRegistration()
            {
                ID = Guid.NewGuid().ToString(), //服务编号,不可重复
                Name = configuration["Consul:ServiceName"], //服务名称
                Port = port, //本程序的端口号
                Address = ip, //本程序的IP地址
                Check = new AgentServiceCheck()
                {
                    DeregisterCriticalServiceAfter = TimeSpan.FromMilliseconds(1), //服务停止后多久注销
                    Interval = TimeSpan.FromSeconds(5), //服务健康检查间隔
                    Timeout = TimeSpan.FromSeconds(5), //检查超时的时间
                    HTTP = $"http://{ip}:{port}{checkUrl}",//健康检查地址, //检查的地址
                }
            });
        }  
    }
  1. 修改appsettings.json文件内容,下图所示:
    在这里插入图片描述
    appsettings.json内容如下(示例):
    "Consul": {
    "Address": "http://127.0.0.1:8500",
    "CheckUrl": "/api/Health",
    "DataCenter": "dc1",
    "ServiceName": "Student2"
  }
  1. Controllers文件夹中创建一个服务健康检查的控制器(HealthController),下图所示:
    在这里插入图片描述
    在这里插入图片描述

HealthController代码如下(示例):

     public class HealthController : Controller
    {
        [Route("api/Health")]
        public IActionResult Get()
        {
            return Ok("ok");
        }
    }
  }
  1. 修改Startup代码,将Tool 文件的ConsulConfigurationEx类注入 ,下图所示:
    在这里插入图片描述

Startup 添加代码如下(示例):

     //注入Consul配置
    Configuration.ConsulRegister();

3.运行效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值