Rabbitmq Spring集成和AMQP:如何优雅地处理反序列化异常?

Rabbitmq Spring集成和AMQP:如何优雅地处理反序列化异常?,rabbitmq,amqp,spring-integration,spring-amqp,spring-rabbit,Rabbitmq,Amqp,Spring Integration,Spring Amqp,Spring Rabbit,我使用RabbitMQ和Spring集成来处理传入的JSON消息 配置的相关部分如下所示: <amqp:inbound-channel-adapter channel="incomingChannel" queue-names="..." message-converter="jsonConverter" error-handler="errorHandler" error-channel="errorChannel" /> 然后由errorHandler处

我使用RabbitMQSpring集成来处理传入的JSON消息

配置的相关部分如下所示:

<amqp:inbound-channel-adapter channel="incomingChannel" queue-names="..."
      message-converter="jsonConverter" error-handler="errorHandler"
      error-channel="errorChannel" />
然后由
errorHandler
处理异常,它只是一个
MessagePublishingErrorHandler
errorChannel

到目前为止还不错。问题是,消息仍然被AMQP客户端拒绝,尽管我正在使用错误处理程序处理它。RabbitMQ然后一遍又一遍地重新传递消息。即使配置死信队列也无济于事。有没有办法正确处理这种情况

处理过程中(成功反序列化后)的后续异常处理得很好:AMQP消息已确认,错误消息已发送到
errorChannel

有什么想法吗

图书馆版本:

  • Spring集成:3.0.1
  • Spring框架:4.0.2
  • 杰克逊数据绑定:2.3.1

您可以在侦听器容器上设置
defaultRequeueRejected=false

该属性当前未在通道适配器上公开,但您可以将容器定义为
,并使用
侦听器容器
属性将其注入适配器


或者,使用一个自定义的
错误处理程序
,它抛出一个
AmqpRejectAndDontRequeueException

我的错误,
requeue rejected
设置在使用
时确实可用;我忘了我们不久前加的。
org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Listener threw exception
Caused by: org.springframework.amqp.support.converter.MessageConversionException: Failed to convert Message content
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token...