下面的代码在1.2.1版本弹簧集成的Java-DSL的拨回
IntegrationFlows.from(inMessageChannel())//
.enrichHeaders(
c -> c.<InMessage>headerFunction(HEADER_IN_MESSAGE_ID,
(message) -> message.getPayload().getInMessage().getId())//
.<InMessage>headerFunction(HEADER_ORIGINAL_MESSAGE_ID,
(message) -> message.getPayload().getInMessage().getMessageId()),
c -> c.poller(Pollers.fixedDelay(100)//
.transactional(platformTransactionManager)//
.errorChannel(errorChannel())))//
.handle(...)
细节:inMessageChannel()
是一个轮询的信道
errorChannel()
是SubscribableChannel
由于enrichHeaders()
功能已经改变了,我找不到等效代码在5.1.1版本(弹簧集成芯)编写。虽然尝试不同的方法(除其他外,呼吁enrichHeaders每进行一次消费或使用电桥法)我得到以下异常:
java.lang.IllegalArgumentException: A poller should not be specified for endpoint 'myFlow.org.springframework.integration.config.ConsumerEndpointFactoryBean#1', since 'myFlow.channel#0' is a SubscribableChannel (not pollable).
如果我理解正确的1.2.1代码,轮询添加到inMessageChannel()
,在新的版本,它试图将轮询添加到errorChannel()
,这是不允许的。
有任何想法吗 ?谢谢 !
PS:很明显我在春天集成有适应一些代码初学者:)
与版本5.0
开始,这enrichHeaders()
真的被改变。我们所做的只是一个不Consumer
s的合并。因此,目前需要配置它是这样的:
.enrichHeaders(
c -> c.<InMessage>headerFunction(HEADER_IN_MESSAGE_ID,
(message) -> message.getPayload().getInMessage().getId())//
.<InMessage>headerFunction(HEADER_ORIGINAL_MESSAGE_ID,
(message) -> message.getPayload().getInMessage().getMessageId())
.poller(Pollers.fixedDelay(100)//
.transactional(platformTransactionManager)//
.errorChannel(errorChannel())))//