Consul小贴士-记一次Consul注册failing状态跟踪

前言
最近抽了点时间基于最新的Consul1.0.2构建了集群,替换了原来的0.9.2服务。结果在启动基于SpringCloud D版的服务时所有节点的health状态均为DOWN,瞬间一切都不好了,本章记录如何进行坑点的排查并解决的过程,提供一个源码阅读的思路。

本章概要
1、场景描述;
2、源码分析;

场景
1、首先看到如下config-server服务处于failing状态:
Consul小贴士-记一次Consul注册failing状态跟踪_第1张图片

2、通过其health端点即可看到导致Down状态的罪魁祸首Consul:
Consul小贴士-记一次Consul注册failing状态跟踪_第2张图片

源码分析
既然是health端点暴露的异常,则将 HealthMvcEndpoint.java作为分析入口,如下获取所有的health状态:
Consul小贴士-记一次Consul注册failing状态跟踪_第3张图片
继续跟踪
Consul小贴士-记一次Consul注册failing状态跟踪_第4张图片
通过代理invoke获取数据,直接找到Consul对应的健康检查实现 ConsulHealthIndicator.java
Consul小贴士-记一次Consul注册failing状态跟踪_第5张图片
可以看到其获取consul节点的信息写入up状态作为详细参考,正是由于获取过程中出现异常导致了down状态,目前来看是advertiseAddress没有获取到,继续跟进了解self具体是如何构造的,又是如何获取的,通过 AgentConsulClient.java可以找到如下获取consul节点信息的入口
Consul小贴士-记一次Consul注册failing状态跟踪_第6张图片
其通过consul提供的/v1/agent/self端点获取,并将响应的json转换为self对象实例,重点就在此处,继续看self是如何定义的 Self.java,其中advertiseAddress序列化name定义为AdvertiseAddr

在1.0.2版本下确实无此字段名对应,而在0.9.3版本下即可获取到如下的需求字段

Consul小贴士-记一次Consul注册failing状态跟踪_第7张图片
此时再看config-server服务状态已经为passing状态
Consul小贴士-记一次Consul注册failing状态跟踪_第8张图片

你可能感兴趣的:(consul,springcloud)