91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-09-11 17:52:25 來源:億速云 閱讀:124 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關如何處理Spring Cloud Finchley版中Consul多實例注冊的問題的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

consul 簡介

consul 具有以下性質:

  1. 服務發現:consul通過http 方式注冊服務,并且服務與服務之間相互感應。

  2. 服務健康監測

  3. key/value 存儲

  4. 多數據中心

consul可運行在mac windows linux 等機器上。

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

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

問題解讀

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

原因:造成該問題的主要原因是Spring Cloud Consul在注冊的時候實例名(InstanceId)采用了:“服務名-端口號”(即: {spring.application.name}-{server.port} )的值,可以看到這個實例名如果不改變端口號的情況下,實例名都是相同的。如果熟悉Spring Cloud Consul的讀者,可能會問老版本也是這個規則,怎么沒有這個問題呢?。主要是由于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]}

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

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

public class MyConsulServiceRegistry extends ConsulServiceRegistry {

  public MyConsulServiceRegistry(ConsulClient client, ConsulDiscoveryProperties properties, TtlScheduler ttlScheduler, HeartbeatProperties heartbeatProperties) {
    super(client, properties, ttlScheduler, heartbeatProperties);
  }

  @Override
  public void register(ConsulRegistration reg) {
    reg.getService().setId(reg.getService().getName() + “-” + reg.getService().getAddress() + “-” + reg.getService().getPort());
    super.register(reg);
  }
}

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

感謝各位的閱讀!關于“如何處理Spring Cloud Finchley版中Consul多實例注冊的問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德保县| 澎湖县| 永泰县| 黄骅市| 岳池县| 绵阳市| 惠东县| 云阳县| 泸州市| 曲周县| 宾阳县| 太保市| 巴林右旗| 炉霍县| 江达县| 富裕县| 柘荣县| 凤庆县| 宜川县| 鹤庆县| 师宗县| 芦山县| 郸城县| 偃师市| 莒南县| 武乡县| 伊吾县| 大英县| 浦城县| 凉城县| 岚皋县| 兴国县| 微博| 毕节市| 正镶白旗| 刚察县| 修水县| 上林县| 朝阳县| 天门市| 永福县|