.NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(二)
重温Consul最少化集群的搭建
{
"services": [
{
"id": "CLIENT_SERVICE_01",
"name": "CAS Client Service",
"tags": [
"urlprefix-/ClientService01"
],
"address": "192.168.153.132",
"port": ,
"checks": [
{
"name": "clientservice_check01",
"http": "http://192.168.53.132:5000/api/health",
"interval": "10s",
"timeout": "5s"
}
]
},
{
"id": "CLIENT_SERVICE_02",
"name": "CAS Client Service",
"tags": [
"urlprefix-/ClientService02"
],
"address": "192.168.153.132",
"port": ,
"checks": [
{
"name": "clientservice_check02",
"http": "http://192.168.153.132:5001/api/health",
"interval": "10s",
"timeout": "5s"
}
]
}
]
}
添加KEY/VALUE
curl -X PUT -d 'edisonchou' http://192.168.80.100:8500/v1/kv/web/vhallaccount
[root@localhost ~]# ./consul kv get web/vhallaccount
stevelee
[root@localhost ~]# ip addr
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens32: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu qdisc pfifo_fast state DOWN group default qlen
link/ether :0c::a6:a1:1c brd ff:ff:ff:ff:ff:ff
: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::a6:a1: brd ff:ff:ff:ff:ff:ff
inet 192.168.153.129/ brd 192.168.153.255 scope global noprefixroute ens34
valid_lft forever preferred_lft forever
inet6 fe80::6d21:aa51::b80f/ scope link noprefixroute
valid_lft forever preferred_lft forever
再看130的Consul服务端
[root@localhost ~]# ./consul kv get web/vhallaccount
stevelee
[root@localhost ~]# ip addr
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::2c:c2:fc brd ff:ff:ff:ff:ff:ff
inet 192.168.153.130/ brd 192.168.153.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80:::ed9c:c49d:649b/ scope link noprefixroute
valid_lft forever preferred_lft forever
: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::2c:c2: brd ff:ff:ff:ff:ff:ff
inet 192.168.153.170/ brd 192.168.153.255 scope global noprefixroute dynamic ens34
valid_lft 1216sec preferred_lft 1216sec
inet6 fe80::a67c:::27fb/ scope link noprefixroute
valid_lft forever preferred_lft forever
我们也可以通过Consul WEB UI来编辑KV值。
Consul服务的Watch机制
熔断保护在Consul和Ocelot中都有实现,意思就是当一个服务不正常时(比如我们的一个服务实例挂了,Consul的健康检查机制检测到了),应该给系统维护人员给以告警。在Consul中,服务告警也是通过配置文件来实现的。
{
"watches": [
{
"type": "checks",
"handler_type": "http",
"state": "critical",
"http_handler_config": {
"path": "http://192.168.153.132:9000/notice",
"method": "POST",
"timeout": "10s",
"header": { "Authorization": [ "token" ] }
}
}
]
}
我们再新建一个项目,建立一个控制器,用默认的HomController控制器也可以,键入如下代码:
[Produces("application/json")]
public class HomeController : Controller
{
[HttpPost]
[Route("/notice")]
public IActionResult Notice()
{
var stream = HttpContext.Request.Body;
if (HttpContext.Request.ContentLength != null)
{
var buffer = new byte[HttpContext.Request.ContentLength.Value];
stream.Read(buffer, , buffer.Length);
var content = Encoding.UTF8.GetString(buffer); var path = $"{AppDomain.CurrentDomain.BaseDirectory}{DateTime.Now:hh_mm_ss_ffff}.log";
if (!System.IO.File.Exists(path))
{
System.IO.File.Create(path).Close();
} using (var sw = new StreamWriter(path))
{
sw.Write(content);
sw.Flush();
sw.Close();
} return Ok();
} throw new Exception("post is null");
}
}
// :: [WARN] agent: Check "service:CLIENT_SERVICE_01" HTTP request failed: Get http://192.168.153.132:5000/api/health: dial tcp 192.168.153.132:5000: connect: connection refused
// :: [INFO] agent: Synced check "service:CLIENT_SERVICE_01"
// :: [WARN] agent: Check "service:CLIENT_SERVICE_01" HTTP request failed: Get http://192.168.153.132:5000/api/health: dial tcp 192.168.153.132:5000: connect: connection refused
// :: [WARN] agent: Check "service:CLIENT_SERVICE_01" HTTP request failed: Get http://192.168.153.132:5000/api/health: dial tcp 192.168.153.132:5000: connect: connection refused
// :: [WARN] agent: Check "service:CLIENT_SERVICE_01" HTTP request failed: Get http://192.168.153.132:5000/api/health: dial tcp 192.168.153.132:5000: connect: connection refused
// :: [WARN] agent: Check "service:CLIENT_SERVICE_01" HTTP request failed: Get http://192.168.153.132:5000/api/health: dial tcp 192.168.153.132:5000: connect: connection refused
// :: [WARN] agent: Check "service:CLIENT_SERVICE_01" HTTP request failed: Get http://192.168.153.132:5000/api/health: dial tcp 192.168.153.132:5000: connect: connection refused
Watch机制会每隔10s向http://192.168.153.132:9000/notice发送一组json格式的消息,内容如下
[{
"Node": "LZZ.DEV.WebServer",
"CheckID": "service:CLIENT_SERVICE_01",
"Name": "clientservice_check01",
"Status": "critical",
"Notes": "",
"Output": "Get http://192.168.153.132:5000/api/health: dial tcp 192.168.153.132:5000: connect: connection refused",
"ServiceID": "CLIENT_SERVICE_01",
"ServiceName": "CAS Client Service",
"ServiceTags": ["urlprefix-/ClientService01"],
"Definition": {
"HTTP": "",
"Header": null,
"Method": "",
"TLSSkipVerify": false,
"TCP": "",
"Interval": "0s",
"Timeout": "0s",
"DeregisterCriticalServiceAfter": "0s"
}
}]
.NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(二)的更多相关文章
- RAC集群时间同步服务
集群时间同步服务在集群中的两个 Oracle RAC 节点上执行以下集群时间同步服务配置.Oracle Clusterware 11g 第 2 版及更高版本要求在部署了 Oracle RAC 的集群的 ...
- 基于Docker的Consul集群实现服务发现
服务发现 其实简单说,服务发现就是解耦服务与IP地址之间的硬绑定关系,以典型的集群为例,对于集群来说,是有多个节点的,这些节点对应多个IP(或者同一个IP的不同端口号),集群中不同节点责任是不一样的. ...
- Prometheus 通过 consul 分布式集群实现自动服务发现
转载自:https://cloud.tencent.com/developer/article/1611091 1.Consul 介绍 Consul 是基于 GO 语言开发的开源工具,主要面向分布式, ...
- C#使用Consul集群进行服务注册与发现
前言 我个人觉得,中间件的部署与使用是非常难记忆的:也就是说,如果两次使用中间件的时间间隔比较长,那基本上等于要重新学习使用. 所以,我觉得学习中间件的文章,越详细越好:因为,这对作者而言也是一份珍贵 ...
- 《基于Kubernetes舵手集群的设计与实现》
前言 <基于Kubernetes舵手集群的设计与实现>是我的毕业设计项目.本系统采用Kubernetes容器编排.基于Jenkins\Gitlab的CICD技术.EFK日志收集.Prome ...
- SpringCloud-Eureka服务注册与发现(二)
SpringCloud-Eureka服务注册与发现(二) https://www.cnblogs.com/qdhxhz/p/9357502.html https://blog.csdn.net/wei ...
- consul分布式集群搭建
环境准备 三台机器: vm-a 10.200.110.90 centos7vm-b 10.200.110.91 centos7vm-c 10.200.110.93 ...
- 基于k8s的集群稳定架构-转载
基于k8s的集群稳定架构-转载 前言 我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点: 1.发版流程不稳定 2.缺少监控平台[最重要的原因] 3.缺少日志系统 ...
- 使用 Istio CNI 支持强安全 TKE Stack 集群的服务网格流量捕获
作者 陈计节,企业应用云原生架构师,在腾讯企业 IT 负责云原生应用治理产品的设计与研发工作,主要研究利用容器集群和服务网格等云原生实践模式降低微服务开发与治理门槛并提升运营效率. 摘要 给需要快速解 ...
随机推荐
- 【学习】通用函数:快速的元素级数组函数【Numpy】
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数.可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器. sqrt 和 exp为一元(unary ...
- WOW
WOW http://bbs.ngacn.cc/read.php?tid=4992959 http://ngasave.us/popcn/?t=gems 地精科技:国服最流行 http://bbs ...
- 2008nian元旦
我要做---->> 控制财务状况---1记账 2 炒股或基金 3预算 锻炼---每次要达到锻炼的效果 学习计划-- 1报班架构 2 项目管理 3读书 爱好---做饭,收拾整理 职业规划. ...
- 去“BAT”这样面试,拿到offer的几率是80%(转)
一.概述面试,难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:“面试官为什么会这 ...
- 深度学习VS机器学习——到底什么区别
转自:https://baijiahao.baidu.com/s?id=1595509949786067084&wfr=spider&for=pc 最近在听深度学习的课,老师提了一个基 ...
- Java中锁的实现与内存语义
目录 1. 概述 2. 锁的内存语义 3. 锁内存语义的实现 4. 总结 1. 概述 锁在实际使用时只是明白锁限制了并发访问, 但是锁是如何实现并发访问的, 同学们可能不太清楚, 下面这篇文章就来揭开 ...
- javaMail实现收发邮件(一)
电子邮件的传输过程 电子邮件系统采用客户/服务器模式.电子邮件传送需要用到以下3个重要模块:MUA(Mail User Agent,邮件用户代理):用户通过它与电子邮件服务器打交道.MUA实际上就是邮 ...
- 【Django】关于设置和获取cookies
def TestCookies(request): response=HttpResponse() # cookie=request.COOKIES#下面两句等cookies设置以后,才使用 # if ...
- 166. Fraction to Recurring Decimal (Math)
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- http://ctf.bugku.com/challenges#love:bugku--love
做了一道逆向题目,主要关联到base64编码的知识点.下面做一分析. 题目如下: 通过测试,可知它没有加壳.尝试使用IDA进行分析. 1.IDA分析文件 打开文件后,按[shift+F12 ...