gpt4 book ai didi

rabbitmq - Spring 集成和 AMQP : How to gracefully handle deserialization exceptions?

转载 作者:行者123 更新时间:2023-12-04 14:59:02 26 4
gpt4 key购买 nike

我用 兔MQ Spring 集成 处理传入的 JSON 消息 .

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

<amqp:inbound-channel-adapter channel="incomingChannel" queue-names="..."
message-converter="jsonConverter" error-handler="errorHandler"
error-channel="errorChannel" />

我使用 Jackson Databind 作为 JSON 转换器。

有时传入的 JSON 消息有 语法不正确 .这会导致以下(正确)异常:
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...

然后由 errorHandler 处理异常。这只是一个 MessagePublishingErrorHandlererrorChannel .

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

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

有任何想法吗?

库版本:
  • Spring 集成:3.0.1
  • Spring 框架:4.0.2
  • jackson 数据绑定(bind):2.3.1
  • 最佳答案

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

    该属性当前未在 channel 适配器上公开,但您可以将容器定义为 <bean... class="...SimpleMessageListenerContainer"/>并使用 listener-container 将其注入(inject)适配器属性。

    或者,使用自定义 ErrorHandler抛出 AmqpRejectAndDontRequeueException .

    关于rabbitmq - Spring 集成和 AMQP : How to gracefully handle deserialization exceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22044422/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com