Pregunta

¿Cómo configuro la Policina Redelivery en Activemq en una cola?

1) En el doctor, ver: activemq en reembolso, Explica que debe configurarlo en ConnectionFactory o conexión. Pero quiero usar diferentes valores para diferentes colas.

2) Aparte de eso, no parece que funcione. Configurarlo en la fábrica de conexión en primavera (estoy usando ActivemQ 5.4.2. Con Spring 3.0) como este no parece tener ningún efecto:

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

También traté de configurarlo como propiedad en la cola definida, pero eso también parece ser ignorado a medida que se produce el enriquecimiento antes que los valores definidos:

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

Gracias

¿Fue útil?

Solución 2

Lo hice funcionar configurándolo en la fábrica como se hizo anteriormente, pero solo al crear la fábrica de conexión como un frijol de resorte y no a través de XBean como se muestra arriba. Esto se debe a que el XSD no le permite establecer la Policina Redelivery como un objeto, sino simplemente como una cadena. Después de establecer el nivel de caché en el consumidor en el defaultMessageListenercontainer de Spring, todo funcionó.

En la cola, parece que usted puede establecer una política de entrega ... extraño, ya que me gustaría tener diferentes configuraciones para diferentes colas/temas. Imagine que tiene una cola lenta y más rápida, o un sistema externo al que se conecta que necesita más tiempo para recuperarse. Tal vez esta característica aún no se ha implementado

Otros consejos

Yo también estaba usando el método que se muestra por Ivan arriba para AMQ: ConnectionFactory

Mientras actualizaba a Activemq 5.7.0 noté que esto ya no funciona (ya que la implementación de https://issues.apache.org/jira/browse/amq-3224). De todos modos, después de leer una mejor publicación en los foros de ActivemQ que uso actualmente:-

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

Tenga en cuenta que para cualquier mensaje que no se vuelva a colocar después de 6 reintentos, ActiveMQ creará un dlq.Emailqueue 'o dlq.smsqueue y enqueará el mensaje en esa cola (descartándolo de la cola original).

Puedes configurar el redeliveryPolicy dentro de amq espacio de nombres como este:

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

No pude obtener activemq (5.7.0) para reconocer mi política de reembolso cuando la definí usando <amq:properties> en ConnectionFactory o en la cola (seguía utilizando la política predeterminada de servicios de reembolso). Lo que funcionó para mí es esto:

  • Cree la Policina de Peligeria como un frijol independiente, luego la referencia en el Spring-Reference en ConnectionFactory
  • Cree un DLQ explícito y la referencia de primavera en la Policina RedElivery

Spring Config de la siguiente manera:

<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" />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top