如何解决Python boto3和SQS未收到消息
我正在尝试使用Amazon的SQS在Python中实现发送和接收消息 我没有做任何事情使我的代码的接收端检索我发送的消息, 我在做什么错了?
send.py:
var log = {
1: 'Log one.',2: 'Log two.'
};
$('body').terminal({
RETRIEVE: function(logNumber) {
this.echo(log[logNumber]);
}
});
rec.py:
SESSIONS_ACCESS_KEY = "************"
SESSIONS_SECRET_KEY = "************"
sess = boto3.session.Session(aws_access_key_id=SESSIONS_ACCESS_KEY,aws_secret_access_key=SESSIONS_SECRET_KEY,region_name='eu-central-1')
sqs = sess.resource("sqs")
queue = sqs.get_queue_by_name(QueueName='myTestQueue.fifo')
response = queue.send_message(
MessageBody="TEST 123",MessageGroupId='messageGroup1'
)
print(response.get('MessageId'))
print(response.get('MD5OfMessageBody'))
运行send.py python文件时,我得到以下信息:
import time
import boto3
SESSIONS_ACCESS_KEY = "************"
SESSIONS_SECRET_KEY = "************"
sess = boto3.session.Session(aws_access_key_id=SESSIONS_ACCESS_KEY,region_name='eu-central-1')
sqs = sess.resource("sqs")
queue = sqs.get_queue_by_name(QueueName='myTestQueue.fifo')
# Process messages by printing out body
while True:
messages = queue.receive_messages()
print('Amount of existing Queue messages',len(messages))
for message in messages:
print('msg:',message.body)
message.delete()
time.sleep(5)
但是我的rec.py python文件在队列通知中一直收到0条消息:
1451fdb5-0f95-45d6-b1c1-76d9092fb49a
911e12e2292eb0914f39540ae513721c
我在做什么错?我也应该在接收端设置MessageGroupId吗?我应该使用其他命令来发送或接收消息吗?
解决方法
运行您的send.py
代码时,我收到一条错误消息:
botocore.exceptions.ClientError:调用SendMessage操作时发生错误(InvalidParameterValue):队列应启用ContentBasedDeduplication或明确提供MessageDeduplicationId
这是FIFO队列的功能,可避免重复消息。我不确定您在队列中配置了什么,因此我激活了ContentBasedDeduplication
,然后收到了与您显示的类似的日志消息。
然后,我能够重现您未收到邮件的情况。
但是,鉴于已启用ContentBasedDeduplication
,然后我修改了send.py
:
response = queue.send_message(
MessageBody="TEST 123"+ str(random.random()),MessageGroupId='messageGroup1'
)
使用此代码发送邮件时,rec.py
成功接收了邮件。
底线::FIFO队列正在过滤重复的消息,这很可能是您配置它的方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。