JMS アーキテクチャの構築を開始したばかりで、次の基本設定があります。
- グラスフィッシュ v2.1
- TopicConnectionFactory を介してトピックをリッスンする MDB (すべてローカル サーバー上)
現在、MDB は新しいメッセージが到着するとワーカー スレッドを生成します。メッセージを順番に配信する場合でも、要求を同時に処理する前にスレッドが特定の条件をチェックするように同期メカニズムが必要です。
これらのスレッドがデータを共有する方法はありますか? または、同期に使用できる他のメカニズム (データベース テーブル/行ロックを除く) はありますか?
前もって感謝します。
明確にするために、私は自分のスレッドを作成していません。誰もが正しく指摘したように、コンテナは私のためにそれを行います. 私のジレンマを例を挙げて説明しましょう。
-メッセージ A は t=0 に到着し、データ ID 1 を「作成」します
- メッセージ B は t=0.1 に到着し、データ ID 1 を「更新」します
ここで、コンテナーが A と B を処理する 2 つのワーカーを生成し、データを更新するよりもデータを「作成」する方がはるかに時間がかかると仮定すると、更新はより早く処理され、効果はありません。
より明確にするために、
-メッセージ B の処理中に、t=1 でデータ ID 1 を探します (見つからないため、何もせずに終了します)。
- データ ID 1 は、t=2 でメッセージ A を処理中に作成されます。