Spring integration 弹簧集成阻塞轮询器,异步下游,流量完成信号
我正在尝试配置一个轮询器,该轮询器每X秒查询一个bean,以将列表放入一个通道。该通道有一个下游流,该流将列表拆分并输出到发布/子通道(进一步的异步流) 我如何确保在任何给定的时间,只有在流的执行过程中,轮询器必须等待/阻塞流,直到流完成,直到它准备好进行下一次轮询(固定速率/延迟)Spring integration 弹簧集成阻塞轮询器,异步下游,流量完成信号,spring-integration,Spring Integration,我正在尝试配置一个轮询器,该轮询器每X秒查询一个bean,以将列表放入一个通道。该通道有一个下游流,该流将列表拆分并输出到发布/子通道(进一步的异步流) 我如何确保在任何给定的时间,只有在流的执行过程中,轮询器必须等待/阻塞流,直到流完成,直到它准备好进行下一次轮询(固定速率/延迟) 。。。configChannel上的进一步异步流发送出站消息 有没有使用异步切换的阻塞轮询器示例,以及使用barrier向轮询器线程发送完成流信号的示例?而且一次只能进行一次投票。我建议您实施一个Receive
。。。configChannel
上的进一步异步流发送出站消息
有没有使用异步切换的阻塞轮询器示例,以及使用barrier向轮询器线程发送完成流信号的示例?而且一次只能进行一次投票。我建议您实施一个
ReceiveMessageAdvice
(从5.3或AbstractMessageSourceAdvice
开始)。它是afterReceive()
应该按原样返回消息,但是beforeceive()
应该检查一些状态,如果此时无法轮询,则返回false
您可能不需要为该任务设置障碍,但可以使用简单的
AtomicBoolean
bean来检查beforeceive()
到false
的状态,并在下游完成任务时将其恢复到true
。在beforReceive()中
在我的例子中,我如何检查流完成的状态(异步sqs分派到多个队列),如何跟踪所有ACK?可能你应该在聚合器中收集这些完成,然后将原子布尔值更改为真。我想是这样的。此外,由于我没有拆分器,我将不得不使用自定义MessageGroup关联策略。我使用网关在循环中发送消息。然后,网关流将其发送到具有2个SQS端点的发布/子通道,用于2个不同的队列。还有其他解决办法吗?所有这些我都可以使用Future和Java代码来完成,但我希望使用流,因为它提供了这种开箱即用的行为。当然!您可以引入任何自定义关联策略,将这些消息组合到一个组中。最终收到建议的建议,请参阅编辑2
<int:channel id="configListChannel" />
<task:executor id="pollExecutor" pool-size="1" queue-capacity="1" rejection-policy="ABORT" />
<int:inbound-channel-adapter expression="configMap().values()" auto-startup="true" channel="configListChannel">
<int:poller fixed-delay="30" time-unit="SECONDS" task-executor="pollExecutor"/>
</int:inbound-channel-adapter>
<task:executor id="configExecutor" pool-size="5"/>
<int:channel id="configChannel" >
<int:dispatcher task-executor="configExecutor"/>
</int:channel>
<int:chain input-channel="configListChannel" output-channel="configChannel" id="configChain">
<int:splitter/>
<int:filter expression="payload.enablePolling"/>
</int:chain>