Spring JMS Activemq-设置死信队列名称(DLQ)

Urb*_*leg 5 java spring activemq-classic jms

我们在同一个ACTIVEMQ代理上运行3个不同的项目。当前只有一个“ DLQ”队列,我们​​想为每个Web应用程序设置dlq,如下所示:

dlq_webapp1
dlq_webapp2
dlq_webapp3
Run Code Online (Sandbox Code Playgroud)

这样,我们将对重试流程有更多控制。我们如何配置它像这样?这是我们的一些消息传递bean:

    <bean id="redeliveryConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${activemq_url}" />
    <property name="redeliveryPolicy" ref="redeliveryPolicy" />
    <property name="nonBlockingRedelivery" value="true" />
</bean>

<bean id="redeliveryCachingConnectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory"
    p:targetConnectionFactory-ref="redeliveryConnectionFactory"
    p:sessionCacheSize="10" />

<!-- Redelivery: retry after 3sec, 6sec,9sec,12sec,15sec finally put in 
    DLQ -->

<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
    <property name="queue" value="*" />
    <property name="initialRedeliveryDelay" value="0" />
    <property name="redeliveryDelay" value="3000" />
    <property name="maximumRedeliveryDelay" value="3600000" />
    <property name="maximumRedeliveries" value="5" />
    <property name="useExponentialBackOff" value="true" />
    <property name="backOffMultiplier" value="1" />
</bean>


<!-- A JmsTemplate instance that uses the cached connection and destination -->
<bean id="redeliveryJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="redeliveryCachingConnectionFactory" />
    <property name="messageConverter" ref="eventConverter" />
    <property name="sessionTransacted" value="true" />
</bean>
Run Code Online (Sandbox Code Playgroud)

hem*_*900 4

我认为你需要deadLetterStrategy在经纪人处配置。请参阅 - ActiveMQ DLQ中的示例

您可以选择individualDeadLetterStrategy为每个队列创建单独的 DLQ(取决于您的目标策略)。您可以为每个项目/应用程序使用不同的前缀。这样,每个项目/应用程序只能有一个消费者,它使用来自以相应前缀开头的所有 DLQ 的 DLQ 消息(创建消费者时使用通配符)。