14

キューの ActiveMQ で redeliveryPolicy を設定するにはどうすればよいですか?

1)ドキュメントでは、次を参照してください:activeMQ Redelivery、 ConnectionFactory または Connection で設定する必要があることを説明しています。しかし、キューごとに異なる値を使用したいと考えています。

2)それとは別に、私はそれがうまくいかないようです。このようにSpringの接続ファクトリに設定しても(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>

ありがとう

4

4 に答える 4

8

私も上記の 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 を作成し、そのキューにメッセージをエンキューします (元のキューからデキューします)。

于 2012-10-29T04:58:22.670 に答える
6

上記のようにファクトリに設定することで機能しましたが、上記のようにXBeanを介してではなく、Spring Beanとして接続ファクトリを作成した場合のみです。これは、xsd では redeliveryPolicy をオブジェクトとして設定できず、単に文字列として設定できないためです。Spring の DefaultMessageListenerContainer でキャッシュ レベルを Consumer に設定すると、すべてが機能しました。

キューでは、配信ポリシーを簡単に設定できるようです...奇妙なことに、キュー/トピックごとに異なる設定をしたいのです。キューが遅くて高速である、または接続している外部システムが回復するのにより多くの時間を必要としていると想像してみてください。おそらく、この機能はまだ実装されていません。

于 2011-03-17T13:13:04.220 に答える
2

<amq:properties>ConnectionFactoryまたはキューで使用して定義したときにActiveMQ(5.7.0)に再配信ポリシーを認識させることができませんでした(デフォルトの再配信ポリシーを使用し続けました)。私のために働いたのはこれです:

  • RedeliveryPolicyをスタンドアロンBeanとして作成し、ConnectionFactoryでSpring参照します。
  • 明示的なDLQを作成し、RedeliveryPolicyでSpringを参照します

次のようにSpring構成:

<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" />
于 2013-01-30T19:36:39.033 に答える