欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年08月27日 14:10:56   作者:翟永超  
這篇文章主要介紹了詳解Spring Cloud Finchley版中Consul多實例注冊的問題處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

consul 簡介

consul 具有以下性質(zhì):

  1. 服務(wù)發(fā)現(xiàn):consul通過http 方式注冊服務(wù),并且服務(wù)與服務(wù)之間相互感應(yīng)。
  2. 服務(wù)健康監(jiān)測
  3. key/value 存儲
  4. 多數(shù)據(jù)中心

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

由于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時候最嚴(yán)重的一個坑:多實例注冊的問題。

問題解讀

問題:該問題可能在開發(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ù)地址不同,依然會認(rèn)為是不同的實例。在Consul 1.2.x中,服務(wù)實例名成為了集群中的唯一標(biāo)識,所以,也就導(dǎo)致了上述問題。

解決方法

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

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

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

復(fù)制代碼 代碼如下:
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${random.int[10000,99999]}

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

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

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);
  }
}

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中常用的五種List聲明并賦值操作方式

    Java中常用的五種List聲明并賦值操作方式

    在Java編程中經(jīng)常會使用到集合類來存儲和操作多個元素,List是一種常見的集合類,它允許存儲重復(fù)的元素,并且保持元素的插入順序,這篇文章主要給大家介紹了關(guān)于Java中常用的五種List聲明并賦值操作的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • java匿名內(nèi)部類實例簡析

    java匿名內(nèi)部類實例簡析

    匿名類是不能有名稱的類,所以沒辦法引用它們,必須在創(chuàng)建時,作為new語句的一部分來聲明它們,需要了解更多的可以參考本文
    2012-11-11
  • Java+EasyExcel實現(xiàn)文件上傳功能

    Java+EasyExcel實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了如何通過Java和EasyExcel實現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • Spring Boot的Profile配置詳解

    Spring Boot的Profile配置詳解

    本篇文章主要介紹了Spring Boot的Profile配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • java實現(xiàn)gif動畫效果(java顯示動態(tài)圖片)

    java實現(xiàn)gif動畫效果(java顯示動態(tài)圖片)

    這篇文章主要介紹了java實現(xiàn)gif動畫效果示例(java顯示動態(tài)圖片),需要的朋友可以參考下
    2014-04-04
  • Java continue break制作簡單聊天室程序

    Java continue break制作簡單聊天室程序

    這篇文章主要為大家詳細(xì)介紹了Java continue break制作簡單聊天室程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • java網(wǎng)絡(luò)編程之群聊功能

    java網(wǎng)絡(luò)編程之群聊功能

    這篇文章主要為大家詳細(xì)介紹了java網(wǎng)絡(luò)編程之群聊功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • WebUploader實現(xiàn)圖片上傳功能

    WebUploader實現(xiàn)圖片上傳功能

    這篇文章主要為大家詳細(xì)介紹了WebUploader實現(xiàn)圖片上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Springboot使用Maven占位符@替換不生效問題及解決

    Springboot使用Maven占位符@替換不生效問題及解決

    這篇文章主要介紹了Springboot使用Maven占位符@替換不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • java與C 代碼運行效率的對比(整理)

    java與C 代碼運行效率的對比(整理)

    最近和朋友無意間討論起了 有關(guān)java 和C 的 效率問題, (我是java 推介者, 他是 c 語言推介者, 他做的是嵌入式)故,想通過網(wǎng)絡(luò)查詢一下, 總結(jié)一下,兩者到底效率如何,其有何差異,原因又是啥?各種優(yōu)勢有在何處?
    2021-04-04

最新評論