我有以下要求。
1。一个基于Spring的应用程序在一个Unix框上运行,该框在一个表上创建条目。1列称为created_on,该列在创建时会保留时间。
2。另一个基于弹簧集成的应用程序具有30个实例,它们在3个不同的Unix框上运行,每个框上有10个实例(10个不同的PID)。所有这些应用程序都配置了stored-proc-inbound-channel-adapter,该适配器从上表中拉出数据的时间间隔为1秒。
该表具有一个状态列,一旦存储过程选择了记录,该状态列就会标记为Y。
存储过程根据创建于且未标记为Y的记录进行选择。
我不希望使用外部队列在这两个应用程序之间进行通信。
疑问:- 1.是否有可能获得多个节点选择的相同记录?
答案 0 :(得分:1)
1。是否有可能获得多个节点选择的相同记录?
我不知道如何从这里为您提供帮助,但是如果所有逻辑都封装在该存储的proc中,那么您应该不会有任何问题:只要更新,其他任何人都不会选择相同的记录并选择正确的逻辑。
2。是否可以根据特定编号返回结果?
完全不清楚您的问题中的function getS3Data() {
return new Promise((resolve, reject) => {
if (err) {
reject(err)
} else {
const promises = []
for (const i = 0; i < data.Contents.length; i++) {
const currentValue = data.Contents[i];
if (currentValue.Key.endsWith(params.Prefix) == false) {
const goParams = { Bucket: params.Bucket, Key: currentValue.Key };
promises.push(new Promise((res, rej) => {
s3.getObject(goParams, function (err, data) {
if (err) {
rej(err); //error
} else {
res(data.Body.toString());
}
});
}));
}
}
Promise.all(promises).then(resolve);
}
});
}
getS3Data()
.then(result => { // this will actually be `content` from your code example
console.log(result);
}).catch(error => {
console.error(error);
})
是什么,但是存储过程确实可以返回结果-原始集或普通no
参数。这已经完全超出了该线程和Spring Integration职责的范围。
3。如何将节点名称传递给spring上下文(stored-proc-inbound-channel-adapter)?
请研究什么是Spring Framework中的OUT
及其相关的Environment
和属性占位符:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-environment。因此,您确实可以将有关此事件的某些属性传播到存储的proc参数中。
- 当30个节点尝试访问相同的表记录并引发相同的存储过程时,是否会出现性能问题?
不,不是。据您的RDBMS供应商支持并发访问数据库。
5。当存储过程未返回任何数据时,如何处理stored-proc-inbound-channel-adapter?
您可以在@Value
的{{1}}中应用类似AbstractMessageSourceAdvice
的内容,并在以下实现中检查poller
:
stored-proc-inbound-channel-adapter