1、微服务--为什么有consul,consul注册,心跳检测,服务发现

一、为什么有consul?

在微服务,每1个服务都是集群式的,订单服务在10台服务器上都有,那么用户的请求到达,获取哪台服务器的订单服务呢?如果10台中的有的订单服务挂了怎么办?10台服务器扛不住了,水平扩展又新增加了1台服务器提供订单服务,怎么让用户请求知道有新的服务器提供服务了?这时候就需要Consul了,它能通过心跳检测哪些服务还活着,而且有新的服务启动,它也能主动发现

二、consul环境准备

1、consul环境

consul官网:https://www.consul.io/downloads.html,下载windows 64bit

2、启动consul管理后台

然后cmd启动,注意切盘符,路径要对,盘符切到放consul.exe的目录,cd D:\consul\consul agent -dev

访问consul管理后台:http://localhost:8500

三、代码实现

1、添加Webapi服务

namespace ConsulServiceFind.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private IConfiguration _IConfiguration = null;
        private ILogger<ValuesController> _logger = null;

        public ValuesController(IConfiguration iConfiguration, ILogger<ValuesController> logger)
        {
            _IConfiguration = iConfiguration;
            _logger = logger;
        }

        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            this._logger.LogWarning("ValuesController-Get 执行");
            return new JsonResult(new
            {
                Id = 123,
                Name = "david_test",
                IP = this._IConfiguration["ip"],
                port = this._IConfiguration["port"],
                urls = this._IConfiguration["urls"],
                CurrentPath = base.HttpContext.Request.Path
            });
        }

    }
}

2、log4net 集成到Core

2.1、Nuget引入log4net

2.2、Nuget引入Microsoft.Extensions.Logging.Log4Net.AspNetCore

2.3、添加log4net 配置文件 (设置配置文件属性为始终复制,默认配置文件放在根目录下)

2.4、注入ILogger

namespace ConsulServiceFind
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging((context, LoggingBuilder) =>//ILogger
            {
                LoggingBuilder.AddFilter("System", LogLevel.Warning); // 忽略系统的其他日志
                LoggingBuilder.AddFilter("Microsoft", LogLevel.Warning);
                LoggingBuilder.AddLog4Net();
            })
            .UseStartup<Startup>();
    }
}

3、网站启动后需要consul注册

3.1、Nuget引用consul,ConsulRegister类

namespace ConsulServiceFind
{
    public static class ConsulRegister
    {
        public static void RegistConsul(this IConfiguration configuration)
        {
            string ip = configuration["ip"] ?? "Localhost";
            //部署到不同服务器的时候不能写成127.0.0.1或者0.0.0.0,因为这是让服务消费者调用的地址
            int port = int.Parse(configuration["port"]);
            //实例化consul客户端
            ConsulClient consulClient = new ConsulClient(c => {
                c.Address = new Uri("http://127.0.0.1:8500");
                c.Datacenter = "consul";
            });
            //向consul注册服务
            Task<WriteResult> result = consulClient.Agent.ServiceRegister(new AgentServiceRegistration() {
                ID = "david_webapi_test_" + Guid.NewGuid(),//服务编号,不能重复
                Name = "david_webapi",//服务的名字--将来调用时用的就是这个
                Address = ip,
                Port = port,
                Tags = new string[] { },//可以用来设置权重
                Check=new AgentServiceCheck() {
                    DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务停止多久后反注册
                    Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔,或者称为心跳间隔
                    HTTP = $"http://{ip}:{port}/api/health",//健康检查地址,
                    Timeout = TimeSpan.FromSeconds(5)
                }
            });
        }
    }
}

3.2、在Startup的Configure方法里使用consul

3.3、ConsulRegister心跳检测,添加health-check,健康检查

namespace ConsulServiceFind
{
    [Route("api/[controller]")]
    [ApiController]
    public class HealthController : ControllerBase
    {
        private IConfiguration _IConfiguration = null;
        private ILogger<HealthController> _logger = null;
        public HealthController(IConfiguration configuration, ILogger<HealthController> logger)
        {
            this._IConfiguration = configuration;
            this._logger = logger;
        }

        [HttpGet]
        public IActionResult Check()
        {
            this._logger.LogWarning($"{this._IConfiguration["port"]}-Health Check!");
            return Ok();//200
        }
    }
}

4、启动多个WebApi实例,运行两个WebApi服务起来

4.1、cd  切路径--C:\Users\dell\Desktop\ConsulServiceFind\ConsulServiceFind\bin\Debug\netcoreapp2.2

4.2、通过命令行启动2个不同端口的webapi

dotnet ConsulServiceFind.dll --urls="http://*:10010" --ip="127.0.0.1" --port=10010

dotnet ConsulServiceFind.dll --urls="http://*:10020" --ip="127.0.0.1" --port=10020

http://localhost:10010/api/values

http://localhost:10020/api/values

4.3、去http://localhost:8500查看多个服务被发现和心跳检测

原文地址:https://www.cnblogs.com/menglin2010/p/12114473.html

时间: 2024-09-29 23:12:11

1、微服务--为什么有consul,consul注册,心跳检测,服务发现的相关文章

注册服务到服务中心(Consul)

注册服务到服务中心(Consul) 添加POM文件中的依赖 在POM文件添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframew

使用Docker搭建consul集群+registrator实现服务自动注册。

准备工作:10.173.16.83 master10.172.178.76 node110.171.19.139 node210.162.204.252 node3 一.安装consul-clustermaster:docker run -d -h master -v /mnt:/data \-p 10.173.16.83:8300:8300 \-p 10.173.16.83:8301:8301 \-p 10.173.16.83:8301:8301/udp \-p 10.173.16.83:83

实战中的asp.net core结合Consul集群&amp;Docker实现服务治理

0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在写这篇文章之前,我看了很多关于consul的服务治理,但发现基本上都是直接在powershell或者以命令工具的方式在服务器上面直接输入consul agent .... 来搭建启动consul集群,一旦把命令工具关掉,则consul无法再后台启动,尤其是在linux系统中. 如果在window系统中,采用bat文件到时可以做成开机自启,或者在linux中把命令做成一个service 服务文件来启动就可以实现后台运

基于Consul+Registrator+Nginx实现容器服务自动发现的集群框架

我们先来看一下服务发现常用的框架有哪些: zookeeper eureka etcd consul 这里就不挨个来介绍它们了,本文中主要以consul为主,如果你在大量接触或使用微服务的话,你可能会碰到一个问题?当你创建的服务数量越来越多时,这些服务之间的通信便越难管理,而且维护代价会越来越高.consul可以给你答案,我们一起来了解一下consul: 1.了解consul Consul是一个分布式,高度可用且支持多数据中心的服务发现,配置和编排工具. Consul支持大规模部署,配置和维护面向

Zookeeper、Consul 实现注册中心

1.Zookeeper 分布式协调工具,可以实现注册中心 所有实现方式基本一致,只需要先开启zookeeper的服务端,然后再打开客户端jar包即可. Zookeeper一开始连接失败,后面又可以了,可能时我多启动了几次吧,我先用zkcli.cmd测试了一下,然后再打开这个工具用127.0.0.1连接的,后面测试localhost也可以了 2.Consul也一样,打开cmd窗口,到指定目录,然后输入一串命令即可. 两者都是通过@EnableDiscoveryClient注解实现注册: Zooke

Consul集群加入网关服务(Spring Cloud Gateway)

Consul集群加入网关服务 架构示意图 外部的应用或网站通过外部网关服务消费各种服务,内部的生产者本身也可能是消费者,内部消费行为通过内部网关服务消费. 一个内部网关和一个外部网关以及一个Consul Client部署在一台服务器上,这样的网关服务器至少2组,外部网关前面还会有负载均衡设备,内部网关服务使用Consul Client进行查询后使用,内部网关的负载均衡由Consul负责了. 搭建演示环境 在Consul集群Server+Client模式的基础上,我们更新并启动网关服务和消费者服务

spring boot2X整合Consul一使用Feign实现服务调用

服务调用有两种方式: A.使用RestTemplate 进行服务调用 查看 B.使用Feign 进行声明式服务调用 上一次写了使用RestTemplate的方式,这次使用Feign的方式实现 服务注册发现中心使用Consul 启动Consul consul agent -dev spring boot 版本 2.2.1.RELEASE 1.服务端 provider (1)添加依赖 <properties> <java.version>1.8</java.version>

SpringCloud微服务小白入门之Eureka注册中心和服务中心搭建示例

一.注册中心配置文件 代码复制区域: spring: application: name: spring-cloud-server server: port: 7000 eureka: instance: hostname: localhost lease-expiration-duration-in-seconds: 10 #租期更新时间间隔(默认30秒) lease-renewal-interval-in-seconds: 30 #租期到期时间(默认90秒) client: register

docker深入2-使用registrator和consul-template自动注册和变更服务

2016/6/1 一.示例 测试环境基于文档:docker深入2-熟悉和找不同.txt     host-n35                        host-n36 -----------------------------------------------------                                     conf                                     consul-tempalte --------------