Rabbitmq 概念死信交换在我的环境中不起作用

Rabbitmq 概念死信交换在我的环境中不起作用,rabbitmq,spring-amqp,Rabbitmq,Spring Amqp,我尝试在java代码中使用带注释的死信交换。也许我的假设是错误的,它应该如何工作。但在我的方法processMpcMessage中,我将队列中的消息反序列化为POJO。如果我得到一个IllegalargumentException,我希望消息被放到死信队列中。我配置了死信交换和路由密钥,请参见我的代码示例。 如果我抛出抛出新的AmqpRejectAndDontRequeueExceptionmsg,exception;我希望我之前使用的消息会被放入死信队列。 我收到以下调试消息: 2019-02

我尝试在java代码中使用带注释的死信交换。也许我的假设是错误的,它应该如何工作。但在我的方法processMpcMessage中,我将队列中的消息反序列化为POJO。如果我得到一个IllegalargumentException,我希望消息被放到死信队列中。我配置了死信交换和路由密钥,请参见我的代码示例。 如果我抛出抛出新的AmqpRejectAndDontRequeueExceptionmsg,exception;我希望我之前使用的消息会被放入死信队列。 我收到以下调试消息:

2019-02-07 13:35:42009[SimpleAsynctaskeExecutor-1]调试{}-org.springframework.amqp.rabbit.listener.BlockingQueueConsumer-拒绝消息requeue=false

欢迎任何建议 当做 德克


队列是否已经存在

队列是幂等的;创建属性参数后,无法更改它们的属性参数。首先删除它,以便重新创建它


如果不是这样,请打开调试日志以查看发生了什么。

队列确实存在。调试已打开,我可以看到应用程序已连接到队列。我在日志中没有看到死信交换和路由密钥信息。在rabbitmq中,参数在QueueRequeue消息requeue=false上可用,很明显消息被拒绝,而不是requeud;因此,要么路由密钥错误,要么没有使用该路由密钥绑定到DLX的队列。我对其进行了全新配置,现在开始工作。换言之,我的RabbitMQ环境已经很混乱了。谢谢你的建议,还有一个注意事项,不是问题的解决方案,而是代码中的一个错误。Param@Argumentname=defaultRequeueRejected,value=false不是应该在队列上设置的内容,而是作为spring引导属性spring.rabbitmq.listener.simple.default-requeue-rejected:false,在这种情况下,不需要抛出AmqpRejectAndDontRequeueException异常
    @RabbitListener(bindings = @QueueBinding(
                                value = @Queue(
                                        value = "${mpc.inbound.receive.queue}",
                                        durable = "true",
                                        arguments = {
                                                @Argument(name = "x-dead-letter-exchange", value = "${mpc.inbound.dead.letter}"),
                                                @Argument(name = "x-dead-letter-routing-key", value = "${mpc.inbound.receive.error.routing.key}"),
                                                @Argument(name = "defaultRequeueRejected", value = "false")
                                        }),
                                        exchange = @Exchange(value = "${mpc.inbound.exchange}",
                                        type = ExchangeTypes.TOPIC, durable = "true"),
                                        key = "${mpc.inbound.routing.key}"
                                ))
public void processMPCMessage(final Message message) {
//Here the message is deserialized in to a java object and this is where I want to throw a exception. 
try{
}catch(IllegalArgumgenException ex){
    throw new new AmqpRejectAndDontRequeueException(" a error message", ex);
}


}