标签:event 服务 appName eureka instanceInfo serverId 下线 监听
主要是eureka监听存在难点`
/**
* 服务下线事件
* @param event
*/
@EventListener(condition = "#event.replication == false")
public void listen(EurekaInstanceCanceledEvent event) {
String appName = event.getAppName();
String serverId = event.getServerId();
// 已经下线的服务,我们不需要重复发送短信,外层拦截
if (SERVICES.contains(serverId + appName)) {
log.warn("服务已下线,外层拦截, serviceId : {}, appName : {}", serverId, appName);
return;
}
synchronized (this) {
// 已经下线的服务,我们不需要重复发送短信,内层拦截
if (SERVICES.contains(serverId + appName)) {
log.warn("服务已下线,内层拦截, serviceId : {}, appName : {}", serverId, appName);
return;
}
// 首次下线,添加发送短信标志
SERVICES.add(serverId + appName);
String hostName = serverId.split(":")[0];
try {
InetAddress ipAddr = InetAddress.getByName(hostName);
log.info("{}服务,服务id:{}离线,ip:{}", appName, serverId, ipAddr.getHostAddress());
updateServiceStatus(appName, ipAddr.getHostAddress(), 0);
} catch (Exception e) {
log.error("转换hostName对应的ip地址失败,{}", e.getMessage());
// windows平台可能因为是主机名,直接传递主机名
updateServiceStatus(appName, hostName, 0);
}
}
}
/**
* 服务注册事件
* @param event
*/
@EventListener(condition = "#event.replication == false")
public void listen(EurekaInstanceRegisteredEvent event) {
InstanceInfo instanceInfo = event.getInstanceInfo();
String serverId = instanceInfo.getInstanceId();
String appName = instanceInfo.getAppName();
// 防止服务下线后再次调用注册
if(UP.equals(instanceInfo.getStatus().toString())) {
log.info("服务注册,服务信息:{}, 服务名称:{}, 服务id:{}",
instanceInfo, instanceInfo.getAppName(), instanceInfo.getIPAddr());
updateServiceStatus(instanceInfo.getAppName(), instanceInfo.getIPAddr(), 1);
// 服务重启恢复后,删掉发送短信标志
if(SERVICES.contains(serverId + appName)) {
log.warn("再一次注册服务, 服务集合大小 : {}, 删除服务关键字 : {}",
SERVICES.size(), serverId + appName);
SERVICES.remove(serverId + appName);
}
}
}`
标签:event,服务,appName,eureka,instanceInfo,serverId,下线,监听 来源: https://www.cnblogs.com/MailNote1767664891/p/15021147.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。