如何使用Python中的boto库在Amazon SQS中获取消息?

huz*_*yfe 8 python boto amazon-sqs

我在Python中使用boto库来获取Amazon SQS消息.在特殊情况下,我不会从队列中删除消息,以便进行一些更改以恢复临时故障.但我不想不断收到失败的消息.我想要做的是在收到超过3次后删除邮件,或者如果收到次数超过3则不获取邮件.

这样做最优雅的方式是什么?

gar*_*aat 6

至少有几种方法可以做到这一点。

当您在 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)


Sun*_*eri 5

aws对此有内置支持,只需按照以下步骤操作:

  1. 创建死信队列
  2. 通过选中“使用重新驱动策略”为源队列启用重新驱动策略
  3. 选择您在第 1 步中为“死信队列”创建的死信队列
  4. 将“最大接收数”设置为“3”或 1 到 1000 之间的任何值

它的工作原理是,每当工作线程接收到消息时,接收计数就会增加。一旦达到“最大接收数”,消息就会被推送到死信队列。请注意,即使您通过 aws 控制台访问消息,接收计数也会增加。

使用 Amazon SQS 死信队列的