1、微服务--为什么有consul,consul注册,心跳检测,服务发现
一、为什么有Consul?
在微服务架构中,每1个服务都是集群式的提供服务,订单服务在10台服务器上都有,那么用户的请求到达,获取哪台服务器的订单服务呢?如果10台中有的订单服务挂了怎么办?10台服务器扛不住了,水平扩展又新增加了1台服务器提供订单服务,怎么让用户请求知道有新的服务器提供订单服务了?这时候就需要Consul了,它能通过心跳检测哪些服务还活着,而且有新的服务启动,它也能够主动发现。
1、S-B-1服务,S-B-2服务,S-B-3服务注册到Consul
2、Consul健康检查S-B-1服务,S-B-2服务,S-B-3服务
3、S-A调用S-B-1服务,或S-B-2服务,或S-B-3服务

二、Consul环境准备
1、Consul环境下载
Consul官网:https://www.consul.io/downloads.html,下载windows 64bit
2、启动Consul管理后台
盘符切到放consul.exe的目录,然后cmd启动,cd D:\consul\consul agent -dev
3、访问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 = ,
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(),//服务停止多久后反注册
Interval = TimeSpan.FromSeconds(),//健康检查时间间隔,或者称为心跳间隔
HTTP = $"http://{ip}:{port}/api/health",//健康检查地址
Timeout = TimeSpan.FromSeconds()
}
});
}
}
}
3.2、在Startup的Configure方法里使用Consul

3.3、ConsulRegister心跳检测,添加HealthCheck也就是另外一个WebApi,做健康检查
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();//
}
}
}
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、去Consul管理后台http://localhost:8500查看多个服务被发现和心跳检测


1、微服务--为什么有consul,consul注册,心跳检测,服务发现的更多相关文章
- .netcore 微服务快速开发框架 Anno&Viper 注册中心 (服务上线下线预警通知)
1.微服务时代,服务上线先预警通知 在微服务大行其道的今天,相信很多人都用上了微服务或者是微服务的概念也已经有了一个深刻的了解.今天我们不在这里展开阐述,今天我们要说的是微服务伴侣预警通知. 2.注册 ...
- NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成
本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博文了,最近忙着两件事; 一:阅读刘墉先生的<说话的魅力>,以一种微妙的,你我大家都会经常遇见 ...
- .NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(二)
重温Consul最少化集群的搭建
- Ocelot + Consul + Registrator 基于Docker 实现服务发现、服务自动注册
目录 1. Consul集群搭建 1.1 F&Q Consul官方推荐的host网络模式运行 2. Registrator服务注册工具 2.1 F&Q Registrator悬挂服务 ...
- 【微服务No.1】Consul服务发现在windows下简单使用
基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent -dev 显示这个界面说明已经开启成功. 页面显示: 然后访问 ...
- (转)微服务_.NET Core Consul服务发现与治理
原文地址:https://www.cnblogs.com/waynechan/p/9354909.html Consul官网:https://www.consul.io Consul下载地址:http ...
- 注册服务到服务中心(Consul)
注册服务到服务中心(Consul) 添加POM文件中的依赖 在POM文件添加如下依赖: <dependency> <groupId>org.springframework.bo ...
- Consul 多数据中心下的服务注册发现与配置共享
1. Consul简介 Consul是HashiCorp公司推出的开源软件,它提供了一套分布式高可用可横向扩展的解决方案,能为微服务提供服务治理.健康检查.配置共享等能力. Eurake2.x ...
- 使用docker+consul+nginx集成分布式的服务发现与注册架构
一.环境说明: 1.一台虚拟机,该系统已经装好了docker: ip 192.168.10.224 虚拟网卡,与主机互通 操作系统rhel6 内核 2.6.32 64位 docker版本 1.7.1 ...
随机推荐
- zabbix-agentd配置文件详解
agent 端配置文件路径 :/etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid #<===指定pi ...
- drf认证组件、权限组件、jwt认证、签发、jwt框架使用
目录 一.注册接口 urls.py views.py serializers.py 二.登录接口 三.用户中心接口(权限校验) urls.py views.py serializers.py 四.图书 ...
- typescript点滴
typescript比较优质的学习资料都放在前端资料汇总 这些都是为了自己更好的理解和记忆而不是为了学术性的博客. 这里讲的是一些容易忘记的.混淆的. #### typescript的模块的导入3种方 ...
- docker实战部署Javaweb项目
一.部署环境说明 docker服务版本:version 18.09.0nginx服务版本:version: nginx/1.15.10redis服务版本:version: redis/5.0.3tom ...
- vertical-align和line-height的理解及实例
line-height 字符实际大小和font-size的关系: 下图中不同字体font-size都是100px 测量了一下每个 span 的高度:Helvetica 115px,Gruppo 97p ...
- Happycorp:1 Vulnhub Walkthrough
靶机链接: https://www.vulnhub.com/entry/happycorp-1,296/ 网络主机扫描::: 主机端口扫描: NFS文件系统,尝试挂载试试 mount -t nfs 1 ...
- SAP 事务代码 ME31K 报错 - 不含来自带工厂分配的供应商的物料的采购没有被定义 -
SAP 事务代码 ME31K 报错 - 不含来自带工厂分配的供应商的物料的采购没有被定义 - 近日收到业务团队的报错说,试图创建合同,报错如下: 不含来自带工厂分配的供应商的物料的采购没有被定义 这个 ...
- vue更改数组中的值
根据下标更改时 vm为新建的vue对象 ind为数组 第一个e为在数组ind中e索引位置 第二个e为更改为值e vm.$set(vm.ind,e,e) 常规更改 arr为数组 //添加 arr.pus ...
- Mac搭建本地服务器并映射到外网
最近在学习Html,小有进步变想着写一个浪漫的静态页面给女朋友浪漫一下,那么问题就来了,如何把我的网页让对网络一窍不通的女朋友看到,所以便想到了是用自己电脑作为服务器的想法.百度以后整理如下: 首先搭 ...
- 硬件知识整理part1--电阻E系列行业规范
仁者,人心也,义者,人路也. --孟子 “ E ”表示“指数间距”(Exponential Spacing) 在上个20世纪的电子管时代,电子元器件厂商为了便于元件规格的管理和选用.大规模生产的电 ...