Вместо использования встроенного контейнера прослушивателя ответов по умолчанию с псевдо-очередью прямого ответа, используйте Контейнер прослушивателя ответов с именованной очередью, настроенной на маршрутизацию недоставленных сообщений в DLQ.
RabbitTemplate
настроен в качестве прослушивателя контейнера:
@Bean
public RabbitTemplate amqpTemplate() {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory());
rabbitTemplate.setMessageConverter(msgConv());
rabbitTemplate.setReplyQueue(replyQueue());
rabbitTemplate.setReplyTimeout(60000);
rabbitTemplate.setUseDirectReplyToContainer(false);
return rabbitTemplate;
}
@Bean
public SimpleMessageListenerContainer replyListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory());
container.setQueues(replyQueue());
container.setMessageListener(amqpTemplate());
return container;
}
@Bean
public Queue replyQueue() {
return new Queue("my.reply.queue");
}
Обратите внимание, что документацию необходимо обновить, но вам также необходимо
rabbitTemplate.setUseDirectReplyToContainer(false);
ВАЖНО
Если у вас есть несколько экземпляров клиента, каждому требуется своя очередь ответов.