java - 如何强制Rabbit MQ重新累积并发送消息?

标签 java spring rabbitmq spring-integration

我在 XML 文件中配置了几个 Spring-Integration 元素(见下文) 从 amqp channel 适配器,消息被定向到具有实现integrationRouterImpl 的路由器integrationSecondaryRouter。

如果在integrationRouterImpl中存在未捕获的异常,我希望Rabbit MQ会一次又一次地发送消息。然而,这并没有发生。 Rabbit MQ 监视器不显示任何消息累积。我的配置有错误吗?

<int-amqp:inbound-channel-adapter 
    channel="integrationFrontDoorQueueChannel" 
    queue-names="${integration.creation.orders.queue.name}" 
    header-mapper="integrationHeaderMapper"
    connection-factory="connectionFactory" 
    error-channel="errorChannel" 
/>

<int:chain 
        id="integrationFrontDoorQueueChain" 
        input-channel="integrationFrontDoorQueueChannel"
        output-channel="integrationRouterChannel">
    <int:transformer ref="integrationJsonPayloadTransformer" method="transformMessagePayload"/>
    <int:filter ref="integrationNonDigitalCancellationFilter" method="filter"/>
    <int:filter ref="integrationPartnerFilter" method="filter"/>
    <int:filter ref="integrationOrderDtoDgcAndGoSelectFilter" method="filter"/>

</int:chain>

 <int:header-value-router 
    id="integrationPrimaryRouter"
    input-channel="integrationRouterChannel" 
    default-output-channel="integrationFrontDoorRouterChannel"
    resolution-required="false"
    header-name="#{T(com.smartdestinations.constants.SdiConstants).INTEGRATION_PAYLOAD_ACTION_HEADER_KEY}">
    <int:mapping 
        value="#{T(com.smartdestinations.service.integration.dto.IntegrationAction).EXCLUSION_SCAN.name()}" 
        channel="integrationExclusionChannel" 
    />
</int:header-value-router>


<int:router 
        id="integrationSecondaryRouter"
        ref="integrationRouterImpl" 
        input-channel="integrationFrontDoorRouterChannel"
        method="route" 
        resolution-required="false" 
        default-output-channel="nullChannel"
/>

最佳答案

看,您有 error-channel="errorChannel"Documentation就此事指出:

The default "errorChannel" is a PublishSubscribeChannel.

是的,有一名订阅者。但它只是_org.springframework.integration.errorLogger

由于没有人将您的异常重新抛出到 SimpleMessageListenerContainer,因此没有理由 nack 消息并再次重新传递它。

关于java - 如何强制Rabbit MQ重新累积并发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37401825/

相关文章:

java - 如何使用 Java 获取 Sonic 管理控制台容器日志时间戳?

java - 如何使用 Hibernate 为 Spring 数据 JPA 的所有查找方法添加全局 where 子句?

java - 在Spring Integration中处理异常时遇到麻烦

java - 以编程方式设置 JLabel 文本

java - 左侧导航菜单 :Liferay 6. 2

java - Java 应用程序中创建的代理有多少使用 Spring core、Hibernate、Spring AOP?

java - 如何将 JSON 数组作为 URL 中的参数传递

RabbitMQ:从 RabbitMq 交换机路由到每个队列时消息是否重复

java - Spark Structured Streaming with RabbitMQ 源码

java - 使用 swing 代码获得意外的输出