我在 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/