spring - Spring Integration 存储过程入站通道适配器
问题描述
我有以下要求。
1.一个基于 Spring 的应用程序在一个 Unix 机器上运行,该机器在名为 created_on 的 table.1 列上创建条目,该列在创建时保持时间。
2.另一个基于spring集成的应用程序有 30 个实例,它运行在 3 个不同的 Unix 机器上,每个机器上有 10 个实例(10 个不同的 PID)。所有这些应用程序都配置了stored-proc-inbound-channel-adapter,它从上表中以1秒的间隔提取数据。
该表有一个状态列,一旦存储过程选择了记录,该列将标记为 Y。
存储过程根据创建时间和未标记 Y 选择记录。
我不想使用外部队列在 2 个应用程序之间进行通信。
疑问:- 1.是否有机会获得多个节点选择的相同记录?
- 当 30 个节点尝试访问相同的表记录并抛出相同的存储过程时,是否会出现任何性能问题?
解决方案
1.是否有机会获得多个节点选择的相同记录?
我不知道如何从这里为您提供帮助,但是如果所有逻辑都封装在该存储过程中,您应该不会有任何问题:只要更新和选择逻辑,其他人就不会获取相同的记录是的。
2.是否可以根据特定的否返回结果?
完全不清楚no
您的问题是什么,但存储过程确实可以返回结果 - 原始集或普通OUT
参数。这已经完全超出了这个线程和 Spring Integration 的职责范围。
3.如何将节点名称传递给spring上下文(stored-proc-inbound-channel-adapter)?
请研究Environment
Spring Framework 中的内容及其相关@Value
和属性占位符:https ://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-environment 。因此,您确实可以将有关此事的一些属性传播到存储的 proc 参数中。
- 当 30 个节点尝试访问相同的表记录并抛出相同的存储过程时,是否会出现任何性能问题?
不,那不是。只要您的 RDBMS 供应商支持对数据库的并发访问。
5.store过程没有返回数据时,stored-proc-inbound-channel-adapter如何处理?
您可以将类似的东西应用AbstractMessageSourceAdvice
到poller
of 中stored-proc-inbound-channel-adapter
并检查以下result
的实现:
/**
* Subclasses can take actions based on the result of the poll; e.g.
* adjust the {@code trigger}. The message can also be replaced with a new one.
* @param result the received message.
* @param source the message source.
* @return a message to continue to process the result, null to discard whatever the poll returned.
*/
Message<?> afterReceive(Message<?> result, MessageSource<?> source);