5

Windows上のJavaサービスの複数の異なるサーバー間で複数のスレッドの処理を同期する必要があるという問題があります。

このアプリケーションでは、複数のコンシューマスレッドが同じJMSキューからメッセージをプルしています。メッセージは3つまたは4つのグループで送信され、各グループのメッセージが完全に連続して処理されることを確認する必要があります。thread1がメッセージをプルオフし、thread2がそのグループから次のメッセージをプルし、thread2がthread1の処理が完了するのを待ってからメッセージの処理を開始するようにするには、何らかの同期メカニズムが必要です。

スレッドの分散同期メカニズムに関する提案はありますか?あらゆるタイプのソリューションが適しています(JMSソリューション、分散キャッシングなど)。

注:使用しているJMSプロバイダーはActiveMQです。

4

3 に答える 3

8

Hazelcast分散ロックの使用を検討することをお勧めします。スーパーライト、簡単でオープンソース。

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

よろしく、

-タリップ

Hazelcast-オープンソースの分散キュー、マップ、セット、リスト、ロック

于 2009-04-05T19:44:58.947 に答える
8

ActiveMQは、文字通り、まさに必要なものであるはずのメッセージグループをサポートしています。

于 2009-04-03T21:23:56.777 に答える
1

メッセージヘッダーにグループIDのようなものはありますか?その場合、コンシューマーSelectorはグループを順番に処理するためにを作成できます。

特定のコンシューマーへのグループの割り当ては、グループIDをハッシュすることで実行できます。または、Paxosや仮想同期(メッセージは別のキューで送信される)などのコンセンサスプロトコルを使用して、相互にアクティブに調整できます。

于 2009-04-03T21:27:19.497 に答える