次の設定に問題があります。
Java アプリケーションが電子メール メッセージを JMS キューに送信し、キューをリッスンしている MDB が onMessage メソッドで電子メール メッセージを取得し、Gmail SMTP で接続を開き、電子メールを SMTP に送信して接続を閉じます。JMS キュー内のすべてのメッセージに対してこれを実行します。
キューに同時に最大 5 つのメッセージがある場合、うまく機能しています。すべてのメッセージは MDB の 5 つの異なるインスタンスによって同時に取得されるため、Gmail SMTP サーバーへの同時接続は 5 つあります。しかし、JMS キューにさらにメッセージがあると、Gmail SMTP サーバーから接続エラーが発生します。最初の 5 つのメッセージは正しく送信されますが、残りのメッセージは正しく送信されないため、他のメッセージはキューに存在しないため失われます。
私の質問は、JMS キューをリッスンする MDB インスタンスの数を制限することは可能ですか? 最大 5 つの MDB がある場合、キューに 1000 個のメッセージがあったとしても、キューを空にするのに時間がかかりますが、少なくともメッセージを失うことはありません。
この問題を解決するための他の提案は非常に高く評価されます。
Jboss のバージョンは次のとおりです。
[サーバー] リリース ID: JBoss [Trinity] 4.2.3.GA (ビルド: SVNTag=JBoss_4_2_3_GA date=200807181417)
MDB の構成は次のとおりです。
@MessageDriven(activationConfig = {
@ActivationConfigProperty( propertyName = "destinationType", propertyValue = "javax.jms.Queue" ),
@ActivationConfigProperty( propertyName = "destination", propertyValue = "queue/emailQueue")
})
もっと必要ですか?
ありがとう
EDIT 2011-02-14
MDB インスタンスの数を制限したいのは、私が間違っているのかもしれません。JMS スレッドの数に関する構成を見ました。MDB に投稿するスレッドの数を制限すると、問題が解決する可能性がありますか? JMS は、MDB が使用可能になるまで待機してから、msg を再度送信しますか? それを行うことによる副作用はありますか?でもお願いします。ありがとう
編集終了