1

我完全被困住了。我正在使用 SQS 在服务器到服务器之间进行通信。我在凌晨 3 点向队列中添加了一条消息“init_scrape”。我的服务器上的脚本每 5 分钟轮询一次队列,以检查队列上的消息并运行任务。这是我的电子邮件日志:

2013-07-29 03:05:01,857 INFO  Queue Messages Found: run_scrape init_scrape
2013-07-29 03:05:01,858 INFO  Init_Scrape Running
2013-07-29 03:22:45,055 INFO  init_scrape deleted from queue
2013-07-29 03:22:45,211 INFO  Queue Messages Found: run_scrape

此时,init_scrape 已从队列中删除,只剩下 run_scrape。绝对没有其他任何东西将 init_scrape 消息添加到队列中,但这是下一个日志:

2013-07-29 03:25:02,054 INFO  Queue Messages Found: run_scrape init_scrape
2013-07-29 03:25:02,055 INFO  Init_Scrape Running
2013-07-29 03:42:44,739 INFO  init_scrape deleted from queue
2013-07-29 03:42:44,879 INFO  Queue Messages Found: run_scrape

为什么我只将消息发送到队列一次,但即使我的脚本将其从队列中删除,它似乎也会突然出现?

编辑:这与visibility_timeout有关吗?

4

1 回答 1

1

SQS 保证消息将至少传送一次。他们不保证它不会交付很多次。SQS 非常简洁,因为它可以扩展,但实际上由于它们是如何扩展的,你会发现一些奇怪的行为,比如这样的消息以及乱序传递的消息,这对于那些不是真的项目来说有点麻烦需要规模。

于 2013-07-29T18:42:10.723 回答