15

次の設定に問題があります。

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 を再度送信しますか? それを行うことによる副作用はありますか?でもお願いします。ありがとう
編集終了

4

2 に答える 2

15

追加のacitivationconfigプロパティを試してください。

@ActivationConfigProperty( propertyName = "maxSession", propertyValue = "someNumber")

ここで、someNumberは必要なインスタンスの最大数です。

于 2011-02-25T21:46:26.310 に答える
1

JBoss 4にステートレスセッションBeanのインスタンスを制限するオプションがある場合、1つのオプションは、メッセージ処理コードをこのBeanに移動し、着信JMSメッセージをそれに渡すことです。(IIRCでBeanに障害が発生すると、JMSメッセージが確認応答されなくなるため、自動的に再試行されます)。

于 2011-03-05T10:21:23.270 に答える