Spring JMS和ActiveMQ在哪里可以看到死信队列中的消息

时间:2018-01-25 16:40:16

标签: activemq message-queue spring-jms dead-letter

这是我的配置:

@Bean
ActiveMQConnectionFactory activeMQConnectionFactory() {
    String url = this.environment.getProperty("jms.broker.url");
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    connectionFactory.setBrokerURL(url);
    connectionFactory.setRedeliveryPolicy(redeliveryPolicy());
    return connectionFactory;
}

@Bean
public RedeliveryPolicy redeliveryPolicy() {
    RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
    redeliveryPolicy.setInitialRedeliveryDelay(500);
    redeliveryPolicy.setBackOffMultiplier(2);
    redeliveryPolicy.setUseExponentialBackOff(true);
    redeliveryPolicy.setMaximumRedeliveries(5);
    return redeliveryPolicy;
}
.....

这是我的消费者:

@Service("msgConsumer")
public class MessageConsumer {

    private static final String ORDER_RESPONSE_QUEUE = "thequeue.Q";

    @JmsListener(destination = ORDER_RESPONSE_QUEUE, containerFactory = "jmsListenerContainerFactory")
    public void receiveMessage(final Message<String> message) throws Exception {

        MessageHeaders headers =  message.getHeaders();
        LOG.info("Application : headers received : {}", headers);

        String response = message.getPayload();
        LOG.info("Application : response received : {}",response);

        if(response.equals("launch"))
            throw new Exception("Error");
    }
}

所以我在队列中输入一条带有效负载=&#34的消息;启动&#34;。

我想测试交易,如果有效负载等于&#34;启动&#34;它抛出异常。

因此,由于重新发送政策,消费者尝试使用该消息5次。 在ActiveMq队列列表中的第五个之后,我没有看到我发送的消息。

邮件放在哪里?在一个死信队列? 在哪里,我可以通过&#34;启动&#34;看到死信队列。消息?

感谢。

1 个答案:

答案 0 :(得分:3)

ActiveMQ.DLQ - 请参阅the documentation here

  

一旦消息的重新传递尝试超过为重新传递策略配置的最大重新传递,就会出现“毒药确认”#34;被送回经纪人,让他知道这条消息被认为是毒丸。然后,代理接收消息并将其发送到死信队列,以便稍后进行分析。

     

ActiveMQ中的默认死信队列称为ActiveMQ.DLQ;所有无法传递的消息都将被发送到此队列,这可能很难管理。因此,您可以在activemq.xml配置文件的目标策略映射中设置individualDeadLetterStrategy,这允许您为给定队列或主题指定特定的死信队列前缀。如果您愿意,可以使用通配符应用此策略,以便所有队列都有自己的死信队列,如下例所示。

您可以在控制台中看到DLQ;你可以像任何其他队列一样消费它。