activeMQ RediliveryPolicyをキューに設定するにはどうすればよいですか?
-
26-10-2019 - |
質問
キューにActiveMQのRediliveryPolicyを設定するにはどうすればよいですか?
1) ドキュメントでは、参照してください: ActiveMQの再配信, 、ConnectionFactoryまたはConnectionで設定する必要があることを説明します。しかし、私は異なるキューに異なる値を使用したいと思っています。
2) それとは別に、私はそれを機能させないようです。春に接続工場に設定します(Spring 3.0でActiveMQ 5.4.2を使用しています)。これは効果がないようです。
<amq:connectionFactory id="amqConnectionFactory" brokerURL="${jms.factory.url}" >
<amq:properties>
<amq:redeliveryPolicy maximumRedeliveries="6" initialRedeliveryDelay="15000" useExponentialBackOff="true" backOffMultiplier="5"/>
</amq:properties>
</amq:connectionFactory>
また、定義されたキューにあるプロパティとして設定しようとしましたが、それはまた、定義された値がより早く再配信が発生するにつれて無視されているようです。
<amq:queue id="jmsQueueDeclarationSnd" physicalName="${jms.queue.declaration.snd}" >
<amq:properties>
<amq:redeliveryPolicy maximumRedeliveries="6" initialRedeliveryDelay="15000" useExponentialBackOff="true" backOffMultiplier="5"/>
</amq:properties>
</amq:queue>
ありがとう
解決 2
上記のように工場に設定することで動作しましたが、上記のようにXbeanを使用しないスプリングビーンとして接続工場を作成する場合にのみです。これは、XSDがrediliverypolicyをオブジェクトとして設定できないため、単に文字列として単に設定できないためです。 SpringのDefaultMessageListenerContainerでキャッシュレベルをConsumerに設定した後、すべてが機能しました。
キューでは、配信ポリシーを簡単に設定できるようです...奇妙なことに、さまざまなキュー/トピックに異なる設定が欲しいので。ゆっくりとより速いキュー、またはあなたがそれに接続する外部システムが回復するためにより多くの時間が必要な場合を想像してください。
他のヒント
私も上記のIvanによって示された方法を使用していました AMQ:ConnectionFactory
ActiveMQ 5.7.0にアップグレードしている間、私はこれが機能しなくなったことに気付きました(の実装以来 https://issues.apache.org/jira/Browse/AMQ-3224)。とにかく、私は現在使用しているActiveMQフォーラムでより良い投稿を読んだ後: -
<amq:queue id="emailQueue" physicalName="emailQueue" />
<amq:queue id="smsQueue" physicalName="smsQueue" />
<!-- Wait 15 seconds first re-delivery, then 45, 135, 405, 1215, 3645 seconds -->
<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
<property name="backOffMultiplier" value="3" />
<property name="initialRedeliveryDelay" value="15000" />
<property name="maximumRedeliveries" value="6" />
<property name="queue" value="*" />
<property name="redeliveryDelay" value="15000" />
<property name="useExponentialBackOff" value="true" />
</bean>
<amq:connectionFactory id="jmsFactory" brokerURL="yourProtocol/BrokerURL">
<property name="redeliveryPolicy" ref="redeliveryPolicy" />
</amq:connectionFactory>
6回の再登録後に再配信されないメッセージの場合、ActiveMQはdlq.emailqueue 'またはdlq.smsqueueを作成し、そのキューのメッセージをenqueeします(元のキューからそれをdequeing)。
設定できます redeliveryPolicy
以内 amq
このような名前空間:
<amq:connectionFactory id="jmsRedeliverConnectionFactory" brokerURL="vm://localhost">
<amq:redeliveryPolicy>
<amq:redeliveryPolicy maximumRedeliveries="5" initialRedeliveryDelay="1000" useExponentialBackOff="true" backOffMultiplier="5" />
</amq:redeliveryPolicy>
</amq:connectionFactory>
ActiveMQ(5.7.0)に、使用して定義したときに再配信ポリシーを認識することができませんでした <amq:properties>
ConnectionFactoryまたはキュー(デフォルトの再配信ポリシーを使用し続けました)。私のために働いたのはこれです:
- StandAlone BeanとしてRediliveryPolicyを作成し、ConnectionFactoryでスプリングリファレンスを作成します
- 明示的なDLQを作成し、RediliveryPolicyにスプリングを参照してください
次のようなスプリング構成:
<amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost" redeliveryPolicy="#activeMQRedeliveryPolicy" />
<amq:redeliveryPolicy id="activeMQRedeliveryPolicy" destination="#myDLQ" useExponentialBackOff="true" backOffMultiplier="3" maximumRedeliveries="4" />
<amq:queue id="myDLQ" physicalName="DLQ.myDLQ" />