.net Core 基于Consul 的服务注册

本文介绍了如何在.NET Core应用中集成Consul进行服务注册,并通过Docker Compose部署多个实例。同时展示了如何设置健康检查以确保服务的高可用性。在Docker容器中,每个实例都向Consul报告其状态,并通过HTTP接口提供健康检查。
摘要由CSDN通过智能技术生成

.net Core 基于Consul 的服务注册

Consul安装部署

需要注意的是端口映射的是8500

[root@localhost NetCoreDockerMicroService]# docker pull consul  #获取镜像

[root@localhost NetCoreDockerMicroService]# docker run -d -p 5300:8500 --name microservice_consul consul #容器

在这里插入图片描述

net core Code 注册consul

nuget中安装consul包

注册consul

    public static class ConsulHelper
    {
        public static void ConsulRegist(this IConfiguration configuration)
        {
            try
            {
                string ip = configuration["ip"];
                string port = configuration["Port"];
                string weight = configuration["weight"];
                string consulAdrress = configuration["ConsulAdrress"];
                string consulCenter = configuration["ConsulCenter"];
                ConsulClient consulCilent = new ConsulClient(x =>
                {
                    x.Address = new Uri(consulAdrress);
                    x.Datacenter = consulCenter;
                });
                consulCilent.Agent.ServiceRegister(new AgentServiceRegistration()
                {
                    ID = "service " + ip + ":" + port,//注册者的 ID
                    Name = "McroServiceDemo",         //在Consul中分组
                    Address = ip,                     //注册者告诉consul它的的端口
                    Port=int.Parse(port),             //注册者告诉consul它的的IP
                    Tags =new string[] {weight.ToString()}
                    //心跳
                    //.....

                }); ;
                Console.WriteLine($"注册成功:{ip}:{port}--weight:{weight}");
            }
            catch (Exception e)
            {

                Console.WriteLine($"注册异常:{e.Message}");
            }
        }
    }

在这里插入图片描述

Docker中使用compose部署.net core code

version: '3'

services:
    MicroService_Instance1:
        container_name: MicroServiceDemo_Instance1
        image: microservicedemo
        build: 
          context: .
          dockerfile: Dockerfile
        ports:
         - "5101:80"
        volumes:
        - /NetCoreDockerMicroService/AppConfigFile/appsettings5101.json:/app/appsettings.json
    MicroService_Instance2:
        container_name: MicroServiceDemo_Instance2
        image: microservicedemo
        ports:
         - "5102:80"
        command: ["dotnet","/app/MicroService.ServiceInstance.dll"]
        volumes:
         - /NetCoreDockerMicroService/AppConfigFile/appsettings5102.json:/app/appsettings.json
    MicroService_Instance3:
        container_name: MicroServiceDemo_Instance3
        image: microservicedemo
        ports:
         - "5103:80"
        command: ["dotnet","/app/MicroService.ServiceInstance.dll"]
        volumes:
         - /NetCoreDockerMicroService/AppConfigFile/appsettings5103.json:/app/appsettings.json

  1. 结果如下

在这里插入图片描述

项目添加consul心跳

vscode中添加心跳控制器

 public class HealthController : Controller
    {
        private readonly IConfiguration _iConfiguration = null;
        public HealthController(IConfiguration configuration)
        {
            _iConfiguration = configuration;
        }
        public IActionResult Index()
        {
            Console.WriteLine($"This is health controller,{this._iConfiguration["port"]} Invoke");
            return Ok();
        }
    }

在文章2节点中的vscode中添加consule心跳

consulCilent.Agent.ServiceRegister(new AgentServiceRegistration()
                {
                    ID = "service " + ip + ":" + port,//注册者的 ID
                    Name = "McroServiceDemo",         //在Consul中分组
                    Address = ip,                     //注册者告诉consul它的的端口
                    Port = int.Parse(port),             //注册者告诉consul它的的IP
                    Tags = new string[] { weight.ToString() },
                    //心跳在这里添加
                    Check = new AgentServiceCheck()
                    {
                        Interval = TimeSpan.FromSeconds(12),        //心跳时间间隔
                        HTTP = $"http://{ip}:{port}/Health/Index",  //心跳的http地址
                        Timeout = TimeSpan.FromSeconds(5),          //超时参数
                        DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20)//超时后consul取消异常服务注册;
                    }
                    //.....
                });

删除镜像,重新docker部署后结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值