相信大家在使用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]}
效果图
image<span style="color:red;font-size:16px">! ! ! 效果图中的错误不必关注,那是因为外网问题</span>
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集成 | 已支持 | 已支持 | 已支持
网友评论