成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Cloud Finchley版中Consul多實(shí)例注冊(cè)的問題處理

開發(fā) 開發(fā)工具
由于Spring Cloud對(duì)Etcd的支持一直沒能從孵化器中出來,所以目前來說大多用戶還在使用Eureka和Consul,之前又因?yàn)镋ureka 2.0不在開源的消息,外加一些博眼球的標(biāo)題黨媒體使得Eureka的用戶有所減少,所以,相信在選擇Spring Cloud的用戶群體中,應(yīng)該有不少用戶會(huì)選擇Consul來做服務(wù)注冊(cè)與發(fā)現(xiàn)。

 由于Spring Cloud對(duì)Etcd的支持一直沒能從孵化器中出來,所以目前來說大多用戶還在使用Eureka和Consul,之前又因?yàn)镋ureka 2.0不在開源的消息,外加一些博眼球的標(biāo)題黨媒體使得Eureka的用戶有所減少,所以,相信在選擇Spring Cloud的用戶群體中,應(yīng)該有不少用戶會(huì)選擇Consul來做服務(wù)注冊(cè)與發(fā)現(xiàn)。

本文就來說一下,當(dāng)我們使用Spring Cloud***的Finchley版 + Consul 1.2.x時(shí)候最嚴(yán)重的一個(gè)坑:多實(shí)例注冊(cè)的問題。

[[242068]]

問題解讀

問題:該問題可能在開發(fā)階段不一定會(huì)發(fā)現(xiàn),但是在線上部署多實(shí)例的時(shí)候,將會(huì)發(fā)現(xiàn)Consul中只有一個(gè)實(shí)例。

原因:造成該問題的主要原因是Spring Cloud Consul在注冊(cè)的時(shí)候?qū)嵗↖nstanceId)采用了:“服務(wù)名-端口號(hào)”(即:{spring.application.name}-{server.port})的值,可以看到這個(gè)實(shí)例名如果不改變端口號(hào)的情況下,實(shí)例名都是相同的。如果熟悉Spring Cloud Consul的讀者,可能會(huì)問老版本也是這個(gè)規(guī)則,怎么沒有這個(gè)問題呢?。主要是由于Consul對(duì)實(shí)例唯一性的判斷標(biāo)準(zhǔn)也有改變,在老版本的Consul中,對(duì)于實(shí)例名相同,但是服務(wù)地址不同,依然會(huì)認(rèn)為是不同的實(shí)例。在Consul 1.2.x中,服務(wù)實(shí)例名成為了集群中的唯一標(biāo)識(shí),所以,也就導(dǎo)致了上述問題。

解決方法

既然知道了原因,那么我們要解決它就可以有的放矢了。下面就來介紹兩個(gè)具體的解決方式:

方法一:通過配置屬性指定新的規(guī)則

下面舉個(gè)例子,通過spring.cloud.consul.discovery.instance-id參數(shù)直接來配置實(shí)例命名規(guī)則。這里比較粗暴的通過隨機(jī)數(shù)來一起組織實(shí)例名。當(dāng)然這樣的組織方式并不好,因?yàn)殡S機(jī)數(shù)依然有沖突的可能,所以您還可以用更負(fù)責(zé)的規(guī)則來進(jìn)行組織實(shí)例名。

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

方法二:通過擴(kuò)展ConsulServiceRegistry來重設(shè)實(shí)例名

由于通過配置屬性的方式對(duì)于定義實(shí)例名的能力有限,所以我們希望可以用更靈活的方式來定義。這時(shí)候我們就可以通過重寫ConsulServiceRegistry的register方法來修改。比如下面的實(shí)現(xiàn):

  1. public class MyConsulServiceRegistry extends ConsulServiceRegistry { 
  2.  
  3.     public MyConsulServiceRegistry(ConsulClient client, ConsulDiscoveryProperties properties, TtlScheduler ttlScheduler, HeartbeatProperties heartbeatProperties) { 
  4.         super(client, properties, ttlScheduler, heartbeatProperties); 
  5.     } 
  6.  
  7.     @Override 
  8.     public void register(ConsulRegistration reg) { 
  9.         reg.getService().setId(reg.getService().getName() + “-” + reg.getService().getAddress() + “-” + reg.getService().getPort()); 
  10.         super.register(reg); 
  11.     } 
  12.  

上面通過拼接“服務(wù)名”-“ip地址”-“端口號(hào)”的方式,構(gòu)造了一個(gè)絕對(duì)唯一的實(shí)例名,這樣就可以讓每個(gè)服務(wù)實(shí)例都能正確的注冊(cè)到Consul上了。

【本文為51CTO專欄作者“翟永超”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過51CTO聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

 

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2017-06-25 13:33:25

Spring Clou微服務(wù)架構(gòu)

2022-08-27 21:37:57

PrometheusRedis?監(jiān)控

2024-11-21 16:09:22

2023-11-28 08:36:16

Spring中Body讀取

2017-07-03 08:29:42

Spring Clou服務(wù)詳解

2018-06-22 15:46:45

Spring Clou加密處理

2022-02-07 07:10:32

服務(wù)注冊(cè)功能

2022-04-05 13:10:15

consul分布式高可用

2025-06-09 01:01:00

2010-09-10 14:26:06

SQLFor循環(huán)

2019-09-20 08:47:57

DockerLinux軟件

2022-10-17 12:12:07

2022-01-16 23:10:40

語言服務(wù)注冊(cè)

2017-05-02 23:05:44

HTTPZuulCookie

2017-07-31 15:47:50

Zuul統(tǒng)一處理

2017-05-18 14:14:25

過濾器Spring ClouZuul

2017-05-19 15:13:05

過濾器Spring ClouZuul

2020-06-29 07:58:18

ZooKeeperConsul 注冊(cè)中心

2021-11-16 11:45:00

SpringSpring ClouJava

2024-07-10 10:51:39

SpringEureka數(shù)據(jù)中心
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一区二区三区高清 | 夜夜爽夜夜操 | 欧美精品二区 | 欧美日韩在线一区二区 | 色狠狠桃花综合 | 91精品国产乱码久久蜜臀 | 日韩国产在线 | 日韩三级电影一区二区 | 国产精品久久久久久吹潮 | 午夜丰满少妇一级毛片 | 羞羞网站在线观看 | 九九导航 | 91久久国产精品 | 日韩久久久久久久 | 久久一区二区三区四区五区 | 欧美偷偷操 | 国产香蕉视频 | 久久久久久成人 | 成人免费看黄网站在线观看 | 国产精品自产拍 | 亚洲精品欧美 | 国产中文视频 | 亚洲精品66 | 久久久精品天堂 | 一区二区三区日韩精品 | 国产日韩欧美激情 | 羞羞视频免费在线观看 | 成人在线小视频 | 91av视频在线 | 久久国产精品亚洲 | 成人一区在线观看 | 日本二区在线观看 | 亚洲国产成人精品久久 | 一级黄色夫妻生活 | www.久| 九九综合九九 | 精品国产乱码一区二区三 | 偷拍自拍网站 | 亚洲第一在线 | 日韩精品在线观看视频 | 国产wwwcom |