java - 使用 Spring Integration 和 RabbitMQ 时如何在消费者端处理格式错误的消息

标签 java spring rabbitmq spring-integration

我目前正在开发一个涉及使用来自 RabbitMQ 代理的消息的项目。然而,我对 Spring Integration、AMQP 和 RabbitMQ 仍然很陌生。 我在使用格式错误的消息时遇到问题。当我的消费者收到格式错误的消息时,它会将其返回队列,然后 RabbitMQ 将其​​发送回,这会造成无限循环。 在 Spring Integration 文档中,有一些配置可以实现这种消息不会返回到队列。

但是我不明白如何实现它。 我想要的是能够配置某种具有类似

格式的 bean
class ExceptionHandler {

   public void handle(Throwable e ) { 

     Logger.log("Some log ... we don't give a Sh** ... ") ; 

   } 

}

我已经检查了3.9 Exception Handling部分 和 3.15.3 Message Listeners and the Asynchronous Case 但不幸的是我什么也听不懂。

因此,如果您有示例代码或链接,请将其发送给我,我将不胜感激。

最佳答案

是的,这是正确的解决方案之一 - 当您决定不应重新排队消息时抛出AmqpRejectAndDontRequeueException

SimpleMessageListenerContainer 上还有 defaultRequeueRejected,默认为 true

您也许应该看看 DLX/DLQ解决方案不丢失那些格式错误的消息。

请分享困扰您的 StackTrace。

SimpleMessageListenerContainer中有这样一段代码:

catch (AmqpRejectAndDontRequeueException rejectEx) {
                    /*
                     *  These will normally be wrapped by an LEFE if thrown by the
                     *  listener, but we will also honor it if thrown by an
                     *  error handler.
                     */
                }

关于java - 使用 Spring Integration 和 RabbitMQ 时如何在消费者端处理格式错误的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29227970/

相关文章:

java - MySQL、MongoDB、RabbitMQ 的事务原子性

Java Telnet 库

java - 避免 Grails 格式化

java - map 的通用方法

Spring AMQP RPC 非默认交换

c# - MassTransit 如何在队列关闭时处理启动/停止

java - 使用现有的中间 CA key 和证书与 keytool 生成客户端证书

java - Kotlin + Spring Boot,找不到 beans

java - 级联删除时 Hook 自定义操作

java - 如何使用 mockMvc 检查响应正文中的 JSON