SQS FIFO 队列使用 BOTO 仅接收一条消息 send_message
SQS FIFO Queue Only Receiving One Message Using BOTO send_message
我正在尝试 运行 一个进程,该进程每 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 库正确。有没有我遗漏或做错了什么?
我没有使用该库的经验,但是阅读文档 here 让我相信一个可能的问题可能是缺少 MessageDeduplicationId
。特别是以下文字:
- You may provide a MessageDeduplicationId explicitly.
- If you aren't able to provide a MessageDeduplicationId and you enable ContentBasedDeduplication for your queue, Amazon SQS uses a SHA-256
hash to generate the MessageDeduplicationId using the body of the
message (but not the attributes of the message).
如果没有看到您的其余代码,我无法判断 ContentBasedDeduplication
是否处于活动状态。如果是,因为它对发送的消息正文进行哈希处理,而您的消息正文永远不会更改,您可能会不断覆盖队列中的前一条消息。
我正在尝试 运行 一个进程,该进程每 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 库正确。有没有我遗漏或做错了什么?
我没有使用该库的经验,但是阅读文档 here 让我相信一个可能的问题可能是缺少 MessageDeduplicationId
。特别是以下文字:
- You may provide a MessageDeduplicationId explicitly.
- If you aren't able to provide a MessageDeduplicationId and you enable ContentBasedDeduplication for your queue, Amazon SQS uses a SHA-256
hash to generate the MessageDeduplicationId using the body of the
message (but not the attributes of the message).
如果没有看到您的其余代码,我无法判断 ContentBasedDeduplication
是否处于活动状态。如果是,因为它对发送的消息正文进行哈希处理,而您的消息正文永远不会更改,您可能会不断覆盖队列中的前一条消息。