AWS SES python sqs.receive_message只返回一个消息输出



我使用amazon-ses-python-sdk来查看给定队列URL的队列中有多少消息。在amazonGUI控制台中,我可以看到队列URL的队列中有3条消息。然而,每次运行命令时,我不会得到超过1条消息作为输出。下面是我的代码

import boto3
import json
from botocore.exceptions import ClientError

def GetSecretKeyAndAccesskey():
#code to pull secretkey and access key
return(aws_access_key,aws_secret_key)
# Create SQS client
aws_access_key_id,aws_secret_access_key = GetSecretKeyAndAccesskey()
sqs = boto3.client('sqs',aws_access_key_id=str(aws_access_key_id),aws_secret_access_key=str(aws_secret_access_key) ,region_name='eu-west-1')
response = sqs.receive_message(
QueueUrl='my_queue_url',
AttributeNames=[
'All',
],
MaxNumberOfMessages=10,
)
print(response["Messages"][0])

每次我运行代码时,我都会得到一个不同的消息id,如果我更改打印代码以检查下一个列表,我会得到列表索引,这意味着只有一条消息

print(response["Messages"][1])
C:>python testing.py
d4e57e1d-db62-4fc5-8233-c5576cb2603d
C:>python testing.py
857858e9-55dc-4d23-aead-3c6622feccc5

首先,您需要添加"WaitTimeSeconds";以打开长轮询并在单个连接期间收集更多消息。

另一个问题是,如果您只在队列中放入3条消息,那么作为AWS SQS服务冗余的一部分,它们在后端系统上会被分离。因此,当您调用SQS时,它会将您连接到其中一个系统,并传递可用的单个消息。如果增加邮件总数,则每个请求将收到更多的邮件。

我编写这段代码是为了演示SQS的功能,并允许您使用这个概念和测试。

import json
session = boto3.Session(region_name="us-east-2", profile_name="dev")
sqs = session.client('sqs')
def get_message():
response = sqs.receive_message(QueueUrl='test-queue', MaxNumberOfMessages=10, WaitTimeSeconds=10)
return len(response["Messages"])
def put_messages(seed):
for message_number in range(seed):
body = {"test": "message {}".format(message_number)}
sqs.send_message(QueueUrl='test-queue', MessageBody=json.dumps(body))
if __name__ == '__main__':
put_messages(2)
print(get_message())

相关内容

最新更新