【问题标题】:SQS FIFO Queue Only Receiving One Message Using BOTO send_messageSQS FIFO 队列使用 BOTO send_message 仅接收一条消息
【发布时间】:2018-12-31 08:46:31
【问题描述】:

我正在尝试运行一个进程,该进程每隔 n 秒向我们手头上的一组设备发送一系列消息到 SQS FIFO 队列:

while 1:
    for i in range(0, len(device_list)):
        print("Putting message on queue for {}".format(device_list[i]))

        resp = sqs.send_message(
            QueueUrl=url,
            MessageAttributes={
                'device': {'DataType': 'String', 'StringValue': device_list[i]},
                'start': {'DataType': 'Number', 'StringValue': stime},
                'end': {'DataType': 'Number', 'StringValue': etime}
            },
            MessageBody=(
                'SQS message test'
            ),
            MessageGroupId=id
        )

   sleep(n)

目前仅使用 20 台设备进行测试。我遇到的问题是FIFO队列只接收到我发送的第一条消息(直接检查SQS控制台,MessagesAvailable属性显示为1)。标准队列(MessagesAvailable 属性为 20)我没有同样的问题,但排序很重要,所以 FIFO 队列是我的目标。

我是 SQS 的新手,所以我不确定我的队列配置是否存在问题(使用默认设置),是否只是 SQS FIFO 队列的一个功能,或者我是否正确使用了 boto 库。我有什么遗漏或做错了吗?

【问题讨论】:

    标签: python boto amazon-sqs


    【解决方案1】:

    我对这个库没有经验,但是阅读文档here 让我相信一个可能的问题可能是缺少提供MessageDeduplicationId。特别是以下文字:

    • 您可以明确提供 MessageDeduplicationId。
    • 如果您无法提供 MessageDeduplicationId 并且您为队列启用 ContentBasedDeduplication,则 Amazon SQS 使用 SHA-256
      使用
      的正文生成 MessageDeduplicationId 的哈希值 消息(但不是消息的属性)。

    没有看到您的其余代码,我无法判断ContentBasedDeduplication 是否处于活动状态。如果是这样,因为它对发送的消息正文进行哈希处理,并且您的消息正文永远不会改变,您可能会不断覆盖队列中的前一条消息。

    【讨论】:

    • 是的,这就是问题所在。我为队列启用了 ContentBasedDeduplication。关闭它并为发送的每条消息指定一个唯一的 MessageDeduplicationId 就可以了。谢谢!
    • @DukeKong 太好了 - 很高兴它有帮助。如果您不介意接受答案,我将不胜感激:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2023-03-03
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多