自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

[[242068]]

問(wèn)題解讀

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

原因:造成該問(wèn)題的主要原因是Spring Cloud Consul在注冊(cè)的時(shí)候?qū)嵗↖nstanceId)采用了:“服務(wù)名-端口號(hào)”(即:{spring.application.name}-{server.port})的值,可以看到這個(gè)實(shí)例名如果不改變端口號(hào)的情況下,實(shí)例名都是相同的。如果熟悉Spring Cloud Consul的讀者,可能會(huì)問(wèn)老版本也是這個(gè)規(guī)則,怎么沒(méi)有這個(gè)問(wèn)題呢?。主要是由于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)致了上述問(wèn)題。

解決方法

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

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

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

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

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

由于通過(guò)配置屬性的方式對(duì)于定義實(shí)例名的能力有限,所以我們希望可以用更靈活的方式來(lái)定義。這時(shí)候我們就可以通過(guò)重寫(xiě)ConsulServiceRegistry的register方法來(lái)修改。比如下面的實(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.  

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

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

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

 

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專(zhuān)欄
相關(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分布式高可用

2010-09-10 14:26:06

SQLFor循環(huán)

2022-10-17 12:12:07

2022-01-16 23:10:40

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

2017-07-31 15:47:50

Zuul統(tǒng)一處理

2017-05-02 23:05:44

HTTPZuulCookie

2020-06-29 07:58:18

ZooKeeperConsul 注冊(cè)中心

2017-05-19 15:13:05

過(guò)濾器Spring ClouZuul

2017-05-18 14:14:25

過(guò)濾器Spring ClouZuul

2019-09-20 08:47:57

DockerLinux軟件

2017-08-10 11:15:05

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

2017-08-09 15:50:47

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

2021-11-16 11:45:00

SpringSpring ClouJava
點(diǎn)贊
收藏

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