我正在尝试使用RPC AMQP RabbitMQ队列发送和接收消息。问题是我已经设置了setReplyTimeout值。发生这种情况时,我收到“ org.springframework.amqp.AmqpRejectAndDontRequeueException:超时后收到答复”。我在传入队列上设置了DLQ,但是当spring尝试在其自动创建的队列上返回消息时,似乎收到了异常。因此,在将消息发送回生产者时如何处理异常?理想情况下,我希望任何发送到生产者的消息在发送到DLQ时都会发生异常。
我正在使用
@RabbitListener(queues = QueueConfig.QUEUE_ALL, containerFactory = "containerFactoryQueueAll")
它需要一个没有setQueues的SimpleRabbitListenerContainerFactory。另外,rabbitTemplate没有rabbitTemplate.setReplyQueue
谢谢, 布莱恩
答案 0 :(得分:0)
与其将默认的内置回复侦听器容器与直接回复伪队列一起使用,不如将Reply Listener Container与命名队列一起使用,该命名队列配置为将无法传递的消息路由到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);
重要
如果您有多个客户端实例,则每个实例都需要自己的回复队列。