3

メッセージを JMS キューに送信する Java コードを作成しています。「QueueSender.send()」を使用してこれを行っています。

JMS キュー自体は sonicMQ ですが、それは的外れです。

私の問題は、JMS キューがいっぱいになり、キューにメッセージを送信しようとするスレッドが不足することがあることです。

メッセージを送信する前にキューがいっぱいかどうかを知る方法はありますか? この場合、ログに例外を出力したいと思います。

ところで、JMS キューのコード自体は私の手の届かないところにあります。クライアントコードだけしか変更できません。

ありがとうございました。

4

3 に答える 3

2

JMS キュー自体は sonicMQ ですが、それは的外れです。

QueueMaxSize私が間違っていなければ、このプロパティは SonicMQ 固有のものです。

私の問題は、JMS キューがいっぱいになり、キューにメッセージを送信しようとするスレッドが不足することがあることです。

プログレス Sonic MQ パフォーマンス チューニング ガイド 7.5QueueMaxSizeプロパティに関する私の理解では、これは通常の (そして必要な) 動作です。

キューに格納されるメッセージの合計サイズはQueueMaxSize. Queue Sender が最大サイズのキューにメッセージを配信しようとすると、送信者はフロー制御され、スペースが利用可能になるまでメッセージの送信はブロックされます。

現在、JMX クライアントで通知を取得することは可能かもしれませんが、これがあなたのコンテキストで実現可能かどうかはわかりません (これをさらに掘り下げたい場合は、 Progress SonicMQ 管理プログラミング ガイド V7.5をご覧くださいサポート)。しかし、これが機能するかどうかは本当にわかりません。実際、あなたがやりたいことが良いアイデアかどうかはわかりません。

于 2010-01-30T09:46:09.350 に答える
2

メッセージを非同期に送信することで、ConnectionFactory で Constants.ASYNC_DELIVERY_MODE_ENABLED を使用して setAsynchronousDeliveryMode を送信できます。

春を使って

<bean id="connectionFactory" class="progress.message.jclient.QueueConnectionFactory">
...
 <property name="asynchronousDeliveryMode">
  <util:constant static-field=  "progress.message.jclient.Constants.ASYNC_DELIVERY_MODE_ENABLED"/>
</property>
</bean>

詳細については、 progress.message.jclient クラス ConnectionFactoryを参照してください。

于 2012-08-15T06:45:10.670 に答える
1

あなたが説明する動作は SonicMQ 固有のものであり、フロー制御と呼ばれます。一部のシナリオでは、これは非常に優れた機能ですが、他のシナリオでは、一連のシステム全体が問題になる可能性があります。残念ながら、キュー ベースのシナリオでこの動作を変更する方法は見つかりませんでした。

この動作を処理するために想像できる唯一のシナリオは、Managemnt API または JMX クライアントを使用することです。2 つの一般的な可能性があります。

  • メッセージを送信する前に、キューの最大サイズと実際のサイズを確認してください
  • FlowControl が発生すると、SonicMQ は通知を生成できます。ここで、これらのイベントをリッスンすることができます。

ただし、これは独自の SonicMQ API でのみ可能であり、標準 JMS では実行できません。SonicMQ 環境の管理者に FLow Control イベントを監視し、適切に対応するよう依頼します...

于 2010-12-31T09:07:53.767 に答える