簡體   English   中英

Java:跨多個服務器同步線程

[英]Java: synchronizing threads across multiple servers

我有一個問題,我需要為Windows上的Java服務跨多個不同服務器同步多個線程的處理。

在這個應用程序中,我在同一個JMS隊列中有多個消費者線程拉取消息。 消息以3或4組的形式出現,我需要確保每個組中的消息都是完全串行處理的。 我需要某種同步機制來確保thread1是否關閉了一個消息,然后thread2從該組中提取下一條消息,thread2在開始處理它的消息之前等待thread1完成處理。

關於線程的分布式同步機制的任何建議? 任何類型的解決方案都會很好(JMS解決方案,分布式緩存等)

注意:我們使用的JMS提供程序是ActiveMQ。

ActiveMQ支持消息組 ,從字面上看,它應該正是您所需要的。

您可能要考慮使用Hazelcast分布式鎖。 超輕,簡單和開源。

java.util.concurrent.locks.Lock lock = Hazelcast.getLock ("mymonitor");
lock.lock ();
try {
// do your stuff
}finally {
   lock.unlock();
}

問候,

-talip

Hazelcast - 開源分布式隊列,地圖,設置,列表,鎖定

消息頭中是否有類似組ID的內容? 如果是這樣,消費者可以創建一個Selector來按順序處理該組。

可以通過散列組標識符來完成將組分配給特定消費者,或者可以使用諸如Paxos或虛擬同步之類的一些共識協議(其中消息通過單獨的隊列發送)主動地彼此協調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM