gpt4 book ai didi

amazon-web-services - 当我尝试从两个不同的终端选项卡轮询相同的 Amazon SQS 时,我在这两个选项卡中都没有收到相同的消息

转载 作者:行者123 更新时间:2023-12-05 02:11:32 24 4
gpt4 key购买 nike

我创建了一个 Amazon SNS 主题。我有一个 Amazon SQS 队列订阅了该主题。

我已经创建了一个默认的 SQS 队列(不是 FIFO 队列)。

我正在使用 sqs-consumer API 对 SQS 队列进行长轮询。

const app = Consumer.create({
queueUrl: 'https://sqs.us-east-2.amazonaws.com/xxxxxxxxxxxx/xxxxxxxxxxx',
handleMessage: async (message) => {

console.log(message);
},
sqs: sqs//new AWS.SQS({apiVersion: '2012-11-05'})
});

app.on('error', (err) => {
console.error(err.message);
});

app.on('processing_error', (err) => {
console.error(err.message);
});

app.on('timeout_error', (err) => {
console.error(err.message);
});

app.start();

当我通过执行 node sqs_client.js 从单个终端运行这段 js 文件时,一切都运行良好,消息按正确顺序发送.

但是,如果打开另一个终端窗口并运行 node sqs_client.js ,那么传入消息的顺序会变得非常随机。较新的消息可能以任何顺序出现在第一个终端窗口或第二个终端窗口中。

为什么会这样?有什么办法可以防止这种情况发生,以便我可以同时在两个终端窗口中收到相同的消息。

最佳答案

你问:“有什么办法......我可以在两个终端窗口中同时获得相同的消息。”

这不是 Amazon SQS 的运作方式。 Amazon SQS的大体流程是:

  • 消息发送到队列
  • 消息在队列中最多保留 14 天(可以延长)
  • 消费者调用 ReceiveMessages(),一次最多请求 10 条消息
  • 收到消息后,将其标记为不可见
  • 当消费者处理完消息后,消费者调用DeleteMessage()从队列中删除消息
  • 如果消费者在不可见超时期限没有调用DeleteMessage(),消息将重新出现在队列中,可供消费者接收

因此,消息有意一次只提供给一个消费者。一旦一条消息被抓取,其他消费者就无法接收它。

如果您的要求是让两个消费者接收相同的消息,那么您将需要重新设计您的架构。您没有提供足够的详细信息来推荐特定方法,但选项包括使用多个 Amazon SQS 队列或直接通过 Amazon SNS 而不是 Amazon SQS 发送消息。

关于amazon-web-services - 当我尝试从两个不同的终端选项卡轮询相同的 Amazon SQS 时,我在这两个选项卡中都没有收到相同的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57468171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com