huz*_*yfe 8 python boto amazon-sqs
我在Python中使用boto库来获取Amazon SQS消息.在特殊情况下,我不会从队列中删除消息,以便进行一些更改以恢复临时故障.但我不想不断收到失败的消息.我想要做的是在收到超过3次后删除邮件,或者如果收到次数超过3则不获取邮件.
这样做最优雅的方式是什么?
至少有几种方法可以做到这一点。
当您在 boto 中阅读消息时,您会收到一个 Message 对象或其某个子类。Message 对象有一个“attributes”字段,它是一个包含 SQS 已知的所有消息属性的字典。SQS 跟踪的一件事是消息被读取的大约次数。因此,您可以使用此值来确定是否应删除该消息,但您必须对该值的“近似”性质感到满意。
或者,您可以在某种数据库中记录消息 ID,并在每次读取消息时增加数据库中的计数字段。如果消息总是在单个进程中被读取,这可以在一个简单的 Python dict 中完成,或者如果您需要跨进程记录读数,则可以在 SimpleDB 之类的东西中完成。
希望有帮助。
下面是一些示例代码:
>>> 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'}
>>>
Run Code Online (Sandbox Code Playgroud)
aws对此有内置支持,只需按照以下步骤操作:
它的工作原理是,每当工作线程接收到消息时,接收计数就会增加。一旦达到“最大接收数”,消息就会被推送到死信队列。请注意,即使您通过 aws 控制台访问消息,接收计数也会增加。
| 归档时间: |
|
| 查看次数: |
11648 次 |
| 最近记录: |