有一种方法可以在不修改标题的情况下完成您需要的操作:
.enrichHeaders(h -> h.header("downloadRetries", new AtomicInteger()))
然后,当您需要增加它时,您应该这样做:
.handle(m -> m.getHeaders().get("downloadRetries", AtomicInteger.class).getAndIncrement())
并将此句柄作为重试服务的发布订阅者通道上的第一个单向第一个订阅者。
UPDATE
是一种单向“MessageHandler”,不适合配置“outputChannel”。这是集成流程的结束。
感谢您分享有关此事的配置:现在我遇到了一个问题,而您误解了。解决方案必须是这样的:
return IntegrationFlows.from( "failed" )
.publishSubscribeChannel(s -> s
.subscribe(f -> f
.handle(m -> m.getHeaders().get("downloadRetries",
AtomicInteger.class).getAndIncrement()))
.handle( logMessage ( "failed" ) )
.route(new RetryRouter())
.get();
}
我们在哪里有一个PublishSubscribeChannel
, the .subscribe()
子流中是第一个订阅者,并且.handle( logMessage ( "failed" ) )
主流程中是第二个订阅者。在第一个订阅者的工作完成之前,最后一个订阅者不会被调用。
查看 Spring 集成参考手册 http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/messaging-channels-section.html#channel-implementations-publishsubscribechannel and Java DSL 手册 https://github.com/spring-projects/spring-integration-java-dsl/wiki/Spring-Integration-Java-DSL-Reference#subflows了解更多信息。