Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration 弹簧集成阻塞轮询器,异步下游,流量完成信号_Spring Integration - Fatal编程技术网

Spring integration 弹簧集成阻塞轮询器,异步下游,流量完成信号

Spring integration 弹簧集成阻塞轮询器,异步下游,流量完成信号,spring-integration,Spring Integration,我正在尝试配置一个轮询器,该轮询器每X秒查询一个bean,以将列表放入一个通道。该通道有一个下游流,该流将列表拆分并输出到发布/子通道(进一步的异步流) 我如何确保在任何给定的时间,只有在流的执行过程中,轮询器必须等待/阻塞流,直到流完成,直到它准备好进行下一次轮询(固定速率/延迟) 。。。configChannel上的进一步异步流发送出站消息 有没有使用异步切换的阻塞轮询器示例,以及使用barrier向轮询器线程发送完成流信号的示例?而且一次只能进行一次投票。我建议您实施一个Receive

我正在尝试配置一个轮询器,该轮询器每X秒查询一个bean,以将列表放入一个通道。该通道有一个下游流,该流将列表拆分并输出到发布/子通道(进一步的异步流) 我如何确保在任何给定的时间,只有在流的执行过程中,轮询器必须等待/阻塞流,直到流完成,直到它准备好进行下一次轮询(固定速率/延迟)


。。。
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>