Spring JMS и ActiveMQ, где можно увидеть сообщения в очереди недоставленных писем

Это моя конфигурация:

@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");
    }
}

Поэтому я поставил в очередь одно сообщение с payload = "launch".

Я хочу протестировать транзакцию, и если полезная нагрузка равна "запуск", она генерирует исключение.

Таким образом, благодаря redeliverypolicy, потребитель пытается использовать сообщение 5 раз. После пятого в списке очереди ActiveMq я не увидел отправленное сообщение.

Где размещено сообщение? В очереди мертвых писем? Где я могу увидеть очередь мертвых писем с сообщением "запуск"?

Благодарю.

1 ответ

ActiveMQ.DLQ - см. документацию здесь.

Как только количество попыток повторной доставки сообщения превысит максимальное количество доставок, настроенное для Политики повторной доставки, брокеру отправляется "Ядовитый ACK", сообщающий ему, что сообщение считается ядовитой таблеткой. Затем брокер берет сообщение и отправляет его в очередь недоставленных сообщений, чтобы впоследствии его можно было проанализировать.

Очередь недоставленных сообщений по умолчанию в ActiveMQ называется ActiveMQ.DLQ; все недоставленные сообщения будут отправлены в эту очередь, и это может быть сложно для управления. Таким образом, вы можете установить IndividualDeadLetterStrategy в карте политик назначения файла конфигурации activemq.xml, которая позволяет вам указать конкретный префикс очереди недоставленных сообщений для данной очереди или темы. Вы можете применить эту стратегию, используя подстановочный знак, если хотите, чтобы все очереди получали собственную очередь недоставленных сообщений, как показано в примере ниже.

Вы можете увидеть DLQ в консоли; вы можете потреблять из него, как и любую другую очередь.

Другие вопросы по тегам