我正在使用Python的boto库获取Amazon SQS消息。在异常情况下,我不会从队列中删除消息,以便为恢复临时故障提供更多机会。但是,我不想不断接收失败的消息。我想要做的是,在接收3次以上后删除消息,或者如果接收计数超过3,则不获取消息。
最优雅的方法是什么?
最优雅的方法是什么?
>>> import boto.sqs
>>> c = boto.sqs.connect_to_region()
>>> q = c.lookup('myqueue')
>>> messages = c.receive_message(q, num_messages=1, attributes='All')
>>> messages[0].attributes
{u'ApproximateFirstReceiveTimestamp': u'1365474374620',
u'ApproximateReceiveCount': u'2',
u'SenderId': u'419278470775',
u'SentTimestamp': u'1365474360357'}
>>>
从您读取的消息中获取ApproximateReceiveCount属性。 将其移动到另一个队列(这样您就可以管理错误消息)或仅将其删除。
foreach (var message in response.Messages){
try{
var notifyMessage = JsonConvert.DeserializeObject<NotificationMessage>(message.Body);
Global.Sqs.DeleteMessageFromQ(message.ReceiptHandle);
}
catch (Exception ex){
var receiveMessageCount = int.Parse(message.Attributes["ApproximateReceiveCount"]);
if (receiveMessageCount >3 )
Global.Sqs.DeleteMessageFromQ(message.ReceiptHandle);
}
}
应该可以分几个步骤完成。
应该能够完美地运作。
sqs = boto3.client('sqs')
response = sqs.receive_message(
QueueUrl='queue_url',
MaxNumberOfMessages=10,
VisibilityTimeout=30,
WaitTimeSeconds=10,
AttributeNames=['ApproximateReceiveCount']
)