gpt4 book ai didi

java - Spring 集成: Poller acting weird

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:05 24 4
gpt4 key购买 nike

我有一个使用jdbc:inbound-channel-adapter从数据库读取数据的配置。配置:

   <int-jdbc:inbound-channel-adapter query="SELECT * FROM requests WHERE processed_status = '' OR processed_status IS NULL LIMIT 5" channel="requestsJdbcChannel"
data-source="dataSource" update="UPDATE requests SET processed_status = 'INPROGRESS', date_processed = NOW() WHERE id IN (:id)" >
<int:poller fixed-rate="30000" />
</int-jdbc:inbound-channel-adapter>

<int:splitter input-channel="requestsJdbcChannel" output-channel="requestsQueueChannel"/>

<int:channel id="requestsQueueChannel">
<int:queue capacity="1000"/>
</int:channel>

<int:chain id="requestsChain" input-channel="requestsQueueChannel" output-channel="requestsApiChannel">
<int:poller max-messages-per-poll="1" fixed-rate="1000" />
.
.
</int:chain>

在上面的配置中,我定义了 jdbc 轮询器,固定速率为 30 秒。当存在直接 channel 而不是 requestsQueueChannel 时,选择查询仅获取 5 行(因为我在选择查询中使用限制行)并等待 30 秒进行下一次轮询。

但是在我引入带有队列的 requestsQueueChannel 并在 requestsChain 中添加轮询器之后,jdbc-inbound 无法按预期工作。它不会再等待 30 秒进行下一次轮询。有时它会连续轮询数据库两次(在一秒内),就好像有两个线程正在运行并从数据库获取两组行。但是,除了上面提到的这些之外,没有异步切换。

我的理解是,即使有requestsQueueChannel,一旦执行选择查询,它应该再等待30秒来轮询数据库。我有什么遗漏的吗?我只是想了解此配置的行为。

最佳答案

使用 DirectChannel 时,在当前轮询结束之前不会考虑下一次轮询。

当使用QueueChannel(或任务执行器)时,轮询器可以再次自由运行。

入站适配器的 max-messages-per-poll 默认设置为 1,因此您的配置应该按预期工作。你能在某处发布调试日志吗?

关于java - Spring 集成: Poller acting weird,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27801257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com