Duk*_*ver 3 message-queue amazon-sqs amazon-web-services long-polling amazon-sns
我创建了一个 Amazon SNS 主题。我有一个订阅该主题的 Amazon SQS 队列。
我创建了一个默认的 SQS 队列(不是 FIFO 队列)。
我正在使用sqs-consumerAPI 来长轮询队列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();
Run Code Online (Sandbox Code Playgroud)
当我js通过执行以下操作从单个终端运行这段文件时node sqs_client.js,一切都工作得很好,消息也按正确的顺序发送。
但是,如果打开另一个终端窗口并运行node sqs_client.js,则传入消息的顺序变得非常随机。较新的消息可能以任何顺序进入第一终端窗口或第二终端窗口。
为什么会这样呢?有什么方法可以防止这种情况,以便我可以同时在两个终端窗口中收到相同的消息。
您问:“有什么办法......我可以同时在两个终端窗口中收到相同的消息。”
这不是 Amazon SQS 的运作方式。Amazon SQS的大致流程是:
ReceiveMessages(),一次请求最多 10 条消息DeleteMessage()从队列中移除消息DeleteMessage()因此,消息有意一次仅可供一个消费者使用。一旦消息被抓取,其他消费者就无法接收该消息。
如果您的要求是两个消费者接收相同的消息,那么您将需要重新设计您的架构。您没有提供足够的详细信息来推荐特定方法,但选项包括使用多个 Amazon SQS 队列或直接通过 Amazon SNS 而不是 Amazon SQS 发送消息。
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |