amazon-sqs - 部署一个SQS使用者

  显示原文与译文双语对照的内容
0 0

我正在寻找运行将被放入到SQS队列中的消息的服务。 什么是构造消费者应用程序的最佳方式?

一种想法是创建一系列线程或者进程来运行这些线程:


def run(q, delete_on_error=False):
 while True:
 try:
 m = q.read(VISIBILITY_TIMEOUT, wait_time_seconds=MAX_WAIT_TIME_SECONDS)
 if m is not None:
 try:
 process(m.id, m.get_body())
 except TransientError:
 continue
 except Exception as ex:
 log_exception(ex)
 if not delete_on_error:
 continue
 q.delete_message(m)
 except StopIteration:
 break
 except socket.gaierror:
 continue

我还有什么重要的? 我还需要在队列读取和删除调用中保护哪些其他异常? 其他人如何运行这些用户?

在这个项目中我找到了 ,但是它似乎停滞了并且存在一些问题。

我倾向于独立的进程而不是线程来避免 GIL 。 是否有一些容器进程可以用来启动和监视这些单独的运行进程?

时间: 原作者:

0 0

这里有一些东西:

  • 允许你使用一个API调用( 最多 10条消息,或者最多达 256k 个消息,任何限制首先打开) 接收多个消息。 利用这个特性可以减少成本,因为每个API调用都会收费。 看起来你正在使用boto库- 看看 get_messages
  • 在代码中,如果处理消息失败,由于暂时错误,消息将无法再次处理,直到可以见超时。 你可能需要考虑立即将消息返回到队列中。 你可以通过在该消息中使用 0 调用 change_visibility 来完成这里操作。 这样的消息就可以直接处理了。 ( 似乎如果这样做的话,可以见性超时将在该消息上永久改变- 这实际上不是例外。 AWS文档状态,"下次接收消息时的可见性超时将恢复为原始超时值"。 有关更多信息,请参见文档 。)

如果你是一个健壮的SQS消息消费者示例,那么你可能想要查看 NServiceBus.AmazonSQS ( 其中我是作者) 。 ( C# - 抱歉,我找不到任何 python 示例。)

...