spring 集成 jdbc 多节点适配器

spring integration jdbc adapter for multiple nodes

我正在使用具有如下典型配置的 jdbc 入站通道适配器从 MYSQL 数据库中检索记录。问题是如何使 jdbc inbound-channel-adapter 在多节点环境中工作?不同的节点将有机会得到一个相同的记录来处理。我知道这可能是一个老问题,但到目前为止我找不到解决方案。

<int-jdbc:inbound-channel-adapter query="select * from messages where state='NEW'"
    channel="jdbcChannel" data-source="datasource" update="update messages set state='PROCESSING' where id in (:id)"
    row-mapper="messageRowMapper" max-rows-per-poll="1">
</int-jdbc:inbound-channel-adapter>

您需要使用 transactions; also see the appendix about transactions.

是的,您应该像 Gary 指出的那样为 <poller> 提供交易,但此外您应该保证一个交易将阻止另一个交易直到它完成。为此,您应该为 SELECT 提供 FOR UPDATELOCK IN SHARE MODE 提示。

更多信息在 MySQL Docs or in this answer: MySQL 'select for update' behaviour 中。