SpringCloud服务多实例注入Consul挂掉问题

相信大家在使用SpringCloud服务的发现与注册,都会对Eureka、Zookeeper、Consul熟悉吧。18年7月份爆出了Eureka2.0不在对外开源的消息。相信会有一部分程序猿逐渐往Consul发展。这其中也包含小生我。

问题

SpringCloud+1.2.x时候最严重的一个问题,就是多实例注册的问题.

原因概述

主要原因是SpringCloud中Consul在注册的时候实例名采用了:服务名-端口号{spring.application.name}-{server.port})的值,可以看到这个实例名如果不改变端口号的情况下,实例名都是相同的。由于Consul对实例唯一性的判断标准也有改变,在老版本的Consul中,对于实例名相同,但是服务地址不同,依然会认为是不同的实例。在Consul 1.2.x中,服务实例名成为了集群中的唯一标识。

解决方法

通过配置 spring.cloud.consul.discovery.instance-id 参数来实例命令规则。利用随机数来控制实例名。

spring.cloud.consul.discovery.instance-id=${spring.application.name}-${random.int[10000,99999]}

效果图

! ! ! 效果图中的错误不必关注,那是因为外网问题

SpringCloud注入与注册类别简单介绍

Feature Consul zookeeper euerka
服务健康检查 服务状态,内存,硬盘等 (弱)长连接,keepalive 可配支持
多数据中心 支持
kv存储服务 支持 支持
一致性 raft paxos
cap ca cp ap
使用接口(多语言能力) 支持http和dns 客户端 http(sidecar)
watch支持 全量/支持long polling 支持 支持 long polling/大部分增量
自身监控 metrics metrics
安全 acl /https acl
spring cloud集成 已支持 已支持 已支持
文章作者: 陈 武
文章链接: http://www.updatecg.xin/2018/09/07/SpringCloud服务多实例注入Consul挂掉问题/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我的学习记录
打赏
  • 微信
  • 支付寶

评论