Frage

Wie setze ich die Redeliverypolicy in Activemq in einer Warteschlange ein?

1) Im Dokument siehe: Activemq Redelivery, Erklären Sie, dass Sie es auf die ConnectionFactory oder Verbindung festlegen sollten. Aber ich möchte verschiedene Wert für verschiedene Warteschlangen verwenden.

2) Abgesehen davon scheine ich nicht zum Laufen zu bringen. Stellen Sie es im Frühjahr auf die Verbindungsfabrik fest (ich verwende Activemq 5.4.2. Mit Feder 3.0) scheint es keinen Effekt zu haben:

<amq:connectionFactory id="amqConnectionFactory" brokerURL="${jms.factory.url}" >
    <amq:properties>
        <amq:redeliveryPolicy maximumRedeliveries="6" initialRedeliveryDelay="15000" useExponentialBackOff="true" backOffMultiplier="5"/>
    </amq:properties>
</amq:connectionFactory>

Ich habe auch versucht, es als Eigenschaft in der definierten Warteschlange festzulegen, aber das scheint auch ignoriert zu werden, wenn die Neulieferung früher auftritt, als die definierten Werte:

<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>

Vielen Dank

War es hilfreich?

Lösung 2

Ich habe es zum Laufen gebracht, indem ich es wie oben auf die Fabrik gesetzt habe, aber nur beim Erstellen der Verbindungsfabrik als Frühlingsbohne und nicht wie oben gezeigt über XBEAN. Dies liegt daran, dass der XSD Ihnen nicht erlaubt, die Redeliverypolicy als Objekt festzulegen, sondern nur als Zeichenfolge. Nachdem das Cache -Level im Verbraucher in der DefaultMessagelistenerContainer von Spring in Spring gesetzt wurde, hat alles funktioniert.

In der Warteschlange scheint es, dass Sie einfach eine Lieferpolitik festlegen können ... seltsam, da ich unterschiedliche Einstellungen für verschiedene Warteschlangen/Themen haben möchte. Stellen Sie sich vor, Sie haben eine langsame und schnellere Warteschlange oder ein externes System, mit dem Sie eine Verbindung zu diesem Bedarf mehr Zeit benötigen, um sich wiederherzustellen. Vielleicht muss diese Funktion noch implementiert werden

Andere Tipps

Auch ich verwendete die von Ivan oben gezeigte Methode für AMQ: ConnectionFactory

Beim Upgrade auf Activemq 5.7.0 habe ich festgestellt, dass dies nicht mehr funktioniert (seit der Implementierung von https://issues.apache.org/jira/browse/amq-3224). Wie auch immer, nachdem ich einen besseren Beitrag in den Activemq-Foren gelesen habe, die ich derzeit verwende:-

<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>

Beachten Sie, dass Activemq für alle Nachrichten, die nach 6 Wiederholungen nicht nachgegeben werden, eine DLQ.Emailqueue 'oder dlq.smsqueue erstellen und die Nachricht in dieser Warteschlange (entfernen Sie sie aus der ursprünglichen Warteschlange).

Sie können die festlegen redeliveryPolicy innerhalb der amq Namespace wie diesen:

<amq:connectionFactory id="jmsRedeliverConnectionFactory" brokerURL="vm://localhost">
  <amq:redeliveryPolicy>
    <amq:redeliveryPolicy maximumRedeliveries="5" initialRedeliveryDelay="1000" useExponentialBackOff="true" backOffMultiplier="5" />
  </amq:redeliveryPolicy>
</amq:connectionFactory>

Ich konnte Activemq (5.7.0) nicht dazu bringen, meine Richtlinie zur erneuten Abstellung zu erkennen <amq:properties> Auf der ConnectionFactory oder der Warteschlange (sie verwendet die Standard -Redelief -Richtlinie). Was für mich funktioniert hat ist:

  • Erstellen Sie die Neuleber als eigenständige Bohne, dann in der ConnectionFactory Spring-Referenz
  • Erstellen Sie einen expliziten DLQ und eine Frühlingsversicherung in der Neuauflage

Federkonfiguration wie folgt:

<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" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top