0

私は、P2P メカニズムを使用して同期的にメッセージを送受信するためにプレーンな JMS API を使用しているスタンドアロンのマルチスレッド アプリケーションに取り組んでいます。複数のスレッドが実行されている場合、コンシューマー オブジェクト (スレッドごとに 1 つのコンシューマー オブジェクト) を使用してデータを受信して​​いるときに、IllegalStateException: セッションが閉じられているという例外がスローされます。以下の2つの方法で試しました。

1) シングルトン クラスで接続オブジェクトとセッション オブジェクトを作成し、メッセージの送受信中にそれらのオブジェクトを使用する。メッセージを送受信するコードを同期しました。

2)5つのセッションを作成するSessionPoolクラス(シングルトン)を作成しました。私のアプリケーションはスレッドプール数が20に制限されており、各スレッドはセッションプールからセッションを取得し、メッセージが受信されるとセッションを返します。これは 5 つのスレッドで正常に機能し、後でセッションが閉じられたことを示す例外がスローされました。

1 つのスレッドごとに 1 つのセッションを作成せずにセッション オブジェクトを効果的に使用する方法について教えてください。

4

1 に答える 1

0

アーキテクチャを再検討することをお勧めします。

JMS は、JMS プロバイダーと JMS コンシューマーの間で通信する方法です。これは、クライアント サーバー アーキテクチャに近いものです。p2p での使用はお勧めしません。

于 2013-03-28T21:26:59.733 に答える