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

Spring Cloud Finchley版中Consul多實例注冊的問題處理

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

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

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

[[242068]]

問題解讀

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

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

解決方法

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

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

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

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

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

由于通過配置屬性的方式對于定義實例名的能力有限,所以我們希望可以用更靈活的方式來定義。這時候我們就可以通過重寫ConsulServiceRegistry的register方法來修改。比如下面的實現(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地址”-“端口號”的方式,構(gòu)造了一個絕對唯一的實例名,這樣就可以讓每個服務(wù)實例都能正確的注冊到Consul上了。

【本文為51CTO專欄作者“翟永超”的原創(chuàng)稿件,轉(zhuǎn)載請通過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

2017-07-03 08:29:42

Spring Clou服務(wù)詳解

2023-11-28 08:36:16

Spring中Body讀取

2018-06-22 15:46:45

Spring Clou加密處理

2022-02-07 07:10:32

服務(wù)注冊功能

2022-04-05 13:10:15

consul分布式高可用

2025-06-09 01:01:00

2010-09-10 14:26:06

SQLFor循環(huán)

2022-10-17 12:12:07

2022-01-16 23:10:40

語言服務(wù)注冊

2019-09-20 08:47:57

DockerLinux軟件

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 注冊中心

2017-08-10 11:15:05

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

2017-08-09 15:50:47

Spring Clou微服務(wù)架構(gòu)
點贊
收藏

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

主站蜘蛛池模板: 天天看天天摸天天操 | 国产乱码精品一区二区三区忘忧草 | 欧美做暖暖视频 | 欧美日韩视频一区二区 | 国产精品久久久久久一级毛片 | 国产高清视频一区二区 | 欧美人成在线视频 | 国产精品伦理一区 | 爱草在线 | 在线观看av网站永久 | 美女视频黄色片 | 欧美视频 亚洲视频 | 91久久国产综合久久91精品网站 | 精品成人在线观看 | 国产我和子的乱视频网站 | 看片国产 | 国产婷婷| 国产精品夜色一区二区三区 | 久久精品aaa | 亚洲欧美日本在线 | 欧美一区二区三区在线 | 国产精品777一区二区 | 婷婷色国产偷v国产偷v小说 | 黄色免费在线观看网址 | 日本aⅴ中文字幕 | 欧美13videosex性极品 | 另类专区亚洲 | 欧美日韩网站 | 欧美日韩久久久久 | 欧美激情在线精品一区二区三区 | 青青草中文字幕 | 国产精品成人久久久久 | 久久久成人免费视频 | 久久天堂网 | 91在线精品一区二区 | 免费国产精品久久久久久 | 成人精品国产一区二区4080 | 日韩一区二区视频 | 九九久久精品 | 日韩成人在线播放 | 国产精品久久久乱弄 |