偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

[[242068]]

問題解讀

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

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

解決方法

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

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

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

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

方法二:通過擴展ConsulServiceRegistry來重設實例名

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

  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.  

上面通過拼接“服務名”-“ip地址”-“端口號”的方式,構造了一個絕對唯一的實例名,這樣就可以讓每個服務實例都能正確的注冊到Consul上了。

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

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

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-06-25 13:33:25

Spring Clou微服務架構

2022-08-27 21:37:57

PrometheusRedis?監(jiān)控

2024-11-21 16:09:22

2017-07-03 08:29:42

Spring Clou服務詳解

2023-11-28 08:36:16

Spring中Body讀取

2018-06-22 15:46:45

Spring Clou加密處理

2022-02-07 07:10:32

服務注冊功能

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

語言服務注冊

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微服務架構

2017-08-09 15:50:47

Spring Clou微服務架構
點贊
收藏

51CTO技術棧公眾號