Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导/RabbitMQ避免未确认消息_Java_Spring_Rabbitmq_Spring Integration_Spring Integration Amqp - Fatal编程技术网

Java Spring引导/RabbitMQ避免未确认消息

Java Spring引导/RabbitMQ避免未确认消息,java,spring,rabbitmq,spring-integration,spring-integration-amqp,Java,Spring,Rabbitmq,Spring Integration,Spring Integration Amqp,如果收到的消息不是UserProfile的有效JSON,则会发生ListenerExecutionFailedException,消息将转到 未确认状态。如何将邮件发送到死信队列?您可以配置死信队列策略,以便将未确认的邮件发送到dlq,而不是将其发送到原始队列 例如,对于队列XYZ,假设您为其设置了XYZ dlq: @RabbitListener(queues="XYZ") public void rabbitMsgReceiver(@Payload final UserProfile up,

如果收到的消息不是
UserProfile
的有效JSON,则会发生
ListenerExecutionFailedException
,消息将转到
未确认状态。如何将邮件发送到死信队列?

您可以配置死信队列策略,以便将未确认的邮件发送到dlq,而不是将其发送到原始队列

例如,对于队列XYZ,假设您为其设置了XYZ dlq:

@RabbitListener(queues="XYZ")
public void rabbitMsgReceiver(@Payload final UserProfile up, Message msg, Channel channel)  {

}

您确定它会进入未确认状态而不是被拒绝并从队列中消失吗?您不应该使用手动确认;让容器处理ACK。消息转换异常被认为是致命的,默认情况下将路由到DLQ。@AdamMichalik是,它将进入未确认状态。@GaryRussell如果我不使用手动确认和自动确认,则此消息永远不会进入死信队列。Msg重新进入就绪状态,侦听器一次又一次地收到此消息并引发异常。请使用默认错误处理程序显示堆栈跟踪,如果异常原因链包含
MessageConversionException
,则将其视为致命消息,并拒绝该消息,而不是拒绝nack。
sudo rabbitmqctl set_policy XYZ-dlq "^XYZ$" '{"dead-letter-exchange":"", "dead-letter-routing-key":"XYZ-dlq"}' --apply-to queues