第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

配置 Hazelcast CPSubsystem 重試超時

配置 Hazelcast CPSubsystem 重試超時

Qyouu 2023-06-08 19:26:30
目前我在CPSubsystem.      -----      | I1* | * Leader      -----  ----       ---- | I2 |     | I3 | ----       ---- 當(dāng)所有實例都啟動運行時,所有實例都已注冊并相互查看,CPSubsystem一切都按預(yù)期工作。以下調(diào)用用于在所有實例之間執(zhí)行分布式鎖:getHazelcastInstance().getCpSubsystem().getLock(lockDefinition.getLockEntryName())當(dāng)其中兩個實例死亡時,我注意到一個問題,并且沒有領(lǐng)導(dǎo)者或其他實例可用于執(zhí)行領(lǐng)導(dǎo)者選舉:      -----      | XXX | * DEAD      -----  ----       ----- | I2 |     | XXX | * DEAD ----       ----- 正在運行的實例然后嘗試獲取分布式鎖,但是請求凍結(jié)執(zhí)行該getLock方法,導(dǎo)致請求排隊幾分鐘(當(dāng)實例成為子系統(tǒng)中的唯一實例時需要配置超時)。我還注意到以下日志被永久打?。?019-08-16 10:56:21.697  WARN 1337 --- [ration.thread-1] Impl$LeaderFailureDetectionTask(default) : [127.0.0.1]:5702 [dev] [3.12.1] We are FOLLOWER and there is no current leader. Will start new election round...2019-08-16 10:56:23.737  WARN 1337 --- [cached.thread-8] c.h.nio.tcp.TcpIpConnectionErrorHandler  : [127.0.0.1]:5702 [dev] [3.12.1] Removing connection to endpoint [127.0.0.1]:5701 Cause => java.net.SocketException {Connection refused to address /127.0.0.1:5701}, Error-Count: 1062019-08-16 10:56:23.927  WARN 1337 --- [ration.thread-1] Impl$LeaderFailureDetectionTask(default) : [127.0.0.1]:5702 [dev] [3.12.1] We are FOLLOWER and there is no current leader. Will start new election round...有沒有辦法識別實例現(xiàn)在是單獨運行的,如果是這樣,在獲取新鎖的過程中不要阻塞應(yīng)用程序?我一直在尋找某種機(jī)制來不以任何方式阻止應(yīng)用程序的流程,即使應(yīng)用程序單獨運行我也會使用常規(guī)而j.u.c.l.ReentrantLock不是FencedLock.
查看完整描述

2 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗 獲得超8個贊

CP 子系統(tǒng)旨在在沒有足夠的成員可用于首先形成 CP 子系統(tǒng)時阻止對屬于 CP 子系統(tǒng)系列的數(shù)據(jù)結(jié)構(gòu)的所有操作。此屬性由CPSubsystemConfig.setCPMemberCount(int)

hazelcastInstance.getCPSubsystem().getCPSubsystemManagementService().getCPMembers()將為您提供集群中的 CP 成員。

要確定集群成員計數(shù),您可以hazelcastInstance.getCluster().getMembers()對成員加入或離開事件使用和/或使用 MembershipListener。


查看完整回答
反對 回復(fù) 2023-06-08
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗 獲得超9個贊

經(jīng)過幾天的測試,我得出以下結(jié)論:

  1. 但是CPSubsystem需要至少三個模塊才能開始工作,運行兩個實例就可以了

  2. 在我提出的最災(zāi)難性的可能場景中(只有一個實例在運行),沒有什么可做的,你的環(huán)境可能有一個 ruff 時間,需要某種干預(yù)或關(guān)注來解決這個中斷

我決定在這種情況下阻止請求被滿足,以保持模塊之間所有操作的一致性。

所以方法如下:

try {

? ? if( !hz.isCpInstanceAvailable() ) {

? ? ? ? throw new HazelcastUnavailableException("CPSubsystem is not available");

? ? }

? ? ... acquires the lock ...

} catch (HazelcastUnavailableException e) {

? ? LOG.error("Error retrieving Hazelcast Distributed Lock :( Please check the CPSubsystem health among all instances", e);

? ? throw e;

}

該方法isCpInstanceAvailable將執(zhí)行三個驗證:

  1. 如果當(dāng)前應(yīng)用程序注冊在CPSubsystem

  2. 如果CPSubsystem

  3. 如果在CPSubsystem

所以這是解決方案:


protected boolean isCpInstanceAvailable() {

? ? try {

? ? ? ? return getCPLocalMember() != null && getCPMembers().get(getMemberValidationTimeout(), TimeUnit.SECONDS).size() > ONE_MEMBER;

? ? } catch (InterruptedException | ExecutionException | TimeoutException e) {

? ? ? ? LOG.error("Issue retrieving CP Members", e);

? ? }


? ? return false;

}


protected ICompletableFuture<Collection<CPMember>> getCPMembers() {

? ? return Optional.ofNullable(getCPSubsystemManagementService().getCPMembers()).orElseThrow(

? ? ? ? ? ? () -> new HazelcastUnavailableException("CP Members not available"));

}


protected CPMember getCPLocalMember() {

? ? return getCPSubsystemManagementService().getLocalCPMember();

}

問題來了,簡單地調(diào)用getCPMembers().get()會導(dǎo)致我遇到的長時間暫停(默認(rèn)超時)。


所以我使用了getCPMembers().get(getMemberValidationTimeout(), TimeUnit.SECONDS),如果調(diào)用超過預(yù)期超時,它將拋出錯誤。


查看完整回答
反對 回復(fù) 2023-06-08
  • 2 回答
  • 0 關(guān)注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號