Spring AMQP RabbitMQ RPC-处理响应异常

Spring AMQP RabbitMQ RPC-处理响应异常,rabbitmq,spring-amqp,spring-rabbit,Rabbitmq,Spring Amqp,Spring Rabbit,我正在尝试使用RPC AMQP RabbitMQ队列发送和接收消息。问题是我设置了一个setReplyTimeout值。发生这种情况时,我会得到一个org.springframework.amqp.AmqpRejectAndDontRequeueException:超时后收到回复。我在传入队列上设置了一个DLQ,但是当spring试图返回自动创建的队列上的消息时,似乎收到了异常。因此,在将消息发送回生产者时,如何处理异常?理想情况下,我希望任何消息在发送到生产者时出现异常,并发送到DLQ 我正在

我正在尝试使用RPC AMQP RabbitMQ队列发送和接收消息。问题是我设置了一个setReplyTimeout值。发生这种情况时,我会得到一个org.springframework.amqp.AmqpRejectAndDontRequeueException:超时后收到回复。我在传入队列上设置了一个DLQ,但是当spring试图返回自动创建的队列上的消息时,似乎收到了异常。因此,在将消息发送回生产者时,如何处理异常?理想情况下,我希望任何消息在发送到生产者时出现异常,并发送到DLQ

我正在使用

@RabbitListener(queues = QueueConfig.QUEUE_ALL, containerFactory = "containerFactoryQueueAll")
它需要没有setQueues的SimpleRableBitListenerContainerFactory。此外,rabbitTemplate没有rabbitTemplate.setReplyQueue

谢谢,
Brian

不要将默认内置的应答侦听器容器与直接应答伪队列一起使用,而是使用一个已配置为将无法传递的消息路由到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);
重要的


如果您有多个客户端实例,每个实例都需要自己的回复队列。

我使用的是@RabbitListenerqueues=QueueConfig.queue\u ALL,containerFactory=containerFactoryQueueAll它需要一个没有setQueues的SimpleRabbitListenerContainerFactory。另外,rabbitTemplate没有rabbitTemplate。setReplyQueueDon不将代码放入注释中;改为编辑问题。回复容器不能是@RabbitListener,它必须是以容器作为侦听器的离散SimpleMessageListenerContainer。抱歉-setReplyQueue在1.7.x中被弃用;现在是setReplyAddress,它可以是一个简单的队列名称,也可以是exchange/routingKey。对不起,我从来没有被要求不要在注释中添加代码,所以我不知道。我将编辑这个问题,并把我最后的评论放在那里。好吧,我真的希望用一个兔子听众。??当回复必须转到模板时,您希望如何使用@RabbitListener在客户端处理回复?当然,您可以在服务器端使用一个。