У меня есть производитель:
rabbitTemplate.convertAndSend(QueueConstants.PROVISIONING_EXCHANGE, QueueConstants.PROVISIONING_ROUTING_KEY, message);
И мой конфиг:
@Bean
Queue organizationProvisioningQueue() {
return QueueBuilder.durable(QueueConstants.PROVISIONING_QUEUE)
.withArgument("x-dead-letter-exchange", "")
.withArgument("x-dead-letter-routing-key", QueueConstants.DEAD_LETTER_QUEUE)
.build();
}
@Bean
Queue deadLetterQueue() {
return QueueBuilder.durable(QueueConstants.DEAD_LETTER_QUEUE).build();
}
@Bean
DirectExchange exchange() {
return new DirectExchange(QueueConstants.PROVISIONING_EXCHANGE);
}
@Bean
Binding binding() {
return BindingBuilder.bind(organizationProvisioningQueue()).to(exchange()).with(QueueConstants.PROVISIONING_ROUTING_KEY);
}
и мой обработчик сообщений:
@RabbitListener(queues = QueueConstants.PROVISIONING_QUEUE)
public void process(ProvisioningMessage message) throws ProvisioningException {
System.out.println("Processing " + message);
throw new ProvisioningException ("Some ex " + message);
}
И константы:
public static final String PROVISIONING_EXCHANGE = "provisioning-exchange";
public static final String PROVISIONING_ROUTING_KEY = "provisioning";
public static final String PROVISIONING_QUEUE = "provisioning-queue";
public static final String DEAD_LETTER_QUEUE = PROVISIONING_QUEUE + ".dlq";
Очередь недоставленных сообщений не работает, поскольку сообщение помещается в очередь каждый раз после того, как генерируется исключение, что приводит к бесконечному l oop вместо перехода в очередь недоставленных сообщений.
Я изменил имя своей очереди, чтобы оно заканчивалось на .dlq, так как это было предложено, но все еще безуспешно. Что я делаю не так?