Question

Comment régler le redeliveryPolicy dans ActiveMQ sur une file d'attente?

1) Dans la doc, voir: activeMQ Relivraison , l'expliquer que vous devez mettre sur ConnectionFactory ou connexion. Mais je veux utiliser la valeur différente de la file d'attente pour différents de.

2) En dehors de cela, je ne semble pas le faire fonctionner. Réglage sur l'usine de connexion au printemps (. J'utilise ActiveMQ avec Spring 3.0 5.4.2) comme celui-ci ne semble pas avoir d'effet:

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

J'ai aussi essayé de le définir comme propriété sur la file d'attente définie, mais qui semblent aussi ignorer que la nouvelle livraison se produit plus tôt que les valeurs définies:

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

Merci

Était-ce utile?

La solution 2

Je l'ai travailler en mettant sur l'usine comme ci-dessus, mais seulement lors de la création de l'usine de connexion comme un haricot printemps et non par XBean comme indiqué ci-dessus. En effet, le xsd ne vous permet pas de définir la redeliveryPolicy comme un objet, mais simplement comme une chaîne. Une fois le niveau du cache à la consommation dans DefaultMessageListenerContainer de printemps, tout a parfaitement fonctionné.

Dans la file d'attente, il semble que vous pouvez simplement définir une politique de livraison ... Etrange, comme je voudrais avoir des paramètres différents pour différents sujets de file d'attente /. Imaginez que vous avez une file d'attente lente et plus rapide, ou un système externe que vous connectez à ce que les besoins plus de temps pour récupérer .. Peut-être que cette fonctionnalité est encore à mettre en œuvre

Autres conseils

Moi aussi j'utilisais la méthode indiquée par Ivan ci-dessus pour AMQ: connectionFactory

Alors que la mise à niveau à ActiveMQ 5.7.0 Je l'ai remarqué ne fonctionne plus (depuis la mise en œuvre de https://issues.apache.org/jira/browse/AMQ-3224 ). Quoi qu'il en soit, après avoir lu un meilleur post sur les forums ActiveMQ J'utilise actuellement: -

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

Notez que pour tous les messages qui ne se relivré après 6 tentatives, ActiveMQ va créer un DLQ.emailQueue » ou DLQ.smsQueue et le message sur enqueue cette file d'attente (dequeuing de la file d'origine).

Vous pouvez définir le redeliveryPolicy au sein de l'espace de noms amq comme ceci:

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

Je ne pouvais pas ActiveMQ (5.7.0) de reconnaître ma politique de relivraison quand je défini à l'aide <amq:properties> sur la ConnectionFactory ou la file d'attente (il continue à utiliser la stratégie par défaut de relivraison). Ce qui a fonctionné pour moi est la suivante:

  • Créez le RedeliveryPolicy comme un haricot autonome, puis référence printemps dans ConnectionFactory
  • Créer un DLQ explicite et référence du printemps dans le RedeliveryPolicy

config Spring comme suit:

<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" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top