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 UPDATE
或 LOCK IN SHARE MODE
提示。
更多信息在 MySQL Docs or in this answer: MySQL 'select for update' behaviour 中。
我正在使用具有如下典型配置的 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 UPDATE
或 LOCK IN SHARE MODE
提示。
更多信息在 MySQL Docs or in this answer: MySQL 'select for update' behaviour 中。