首页 > 解决方案 > 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.是否有机会获得多个节点选择的相同记录?

  1. 当 30 个节点尝试访问相同的表记录并抛出相同的存储过程时,是否会出现任何性能问题?

标签: springperformancespring-dataspring-integrationdatabase-performance

解决方案


1.是否有机会获得多个节点选择的相同记录?

我不知道如何从这里为您提供帮助,但是如果所有逻辑都封装在该存储过程中,您应该不会有任何问题:只要更新和选择逻辑,其他人就不会获取相同的记录是的。

2.是否可以根据特定的否返回结果?

完全不清楚no您的问题是什么,但存储过程确实可以返回结果 - 原始集或普通OUT参数。这已经完全超出了这个线程和 Spring Integration 的职责范围。

3.如何将节点名称传递给spring上下文(stored-proc-inbound-channel-adapter)?

请研究EnvironmentSpring Framework 中的内容及其相关@Value和属性占位符:https ://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-environment 。因此,您确实可以将有关此事的一些属性传播到存储的 proc 参数中。

  1. 当 30 个节点尝试访问相同的表记录并抛出相同的存储过程时,是否会出现任何性能问题?

不,那不是。只要您的 RDBMS 供应商支持对数据库的并发访问。

5.store过程没有返回数据时,stored-proc-inbound-channel-adapter如何处理?

您可以将类似的东西应用AbstractMessageSourceAdvicepollerof 中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);

推荐阅读