当前位置: 首页 > 知识库问答 >
问题:

部署SQS使用者

匡玉堂
2023-03-14

我希望运行一个服务,该服务将使用放入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。是否有一些容器进程可以用来启动和监视这些单独运行的进程?

共有1个答案

陆曜文
2023-03-14

有几件事:

  • SQS API允许您通过单个API调用接收多个消息(最多10个消息,或最多256K值的消息,以先达到的限制为准)。利用这一特性可以降低成本,因为您是按API调用计费的。看起来您正在使用boto库--请查看get_messages
  • 在当前的代码中,如果处理消息时由于瞬时错误而失败,则在可见性超时到期之前无法再次处理该消息。您可能需要考虑立即将消息返回到队列中。您可以通过在该消息上使用0调用change_visibility来完成此操作。然后,该消息将可直接用于处理。(看起来,如果您这样做,那么该消息的可见性超时将永久更改--实际上并非如此。AWS文档声明“下次接收消息时的可见性超时将恢复到原始超时值”。有关详细信息,请参阅文档。)

如果您正在寻找一个健壮的SQS消息使用者的示例,那么您可能希望查看NServiceBus.AmazonSQS(我是其作者)。(C#-对不起,我找不到任何python示例。)

 类似资料:
  • 我的ant-script和Tomcat有问题。我想创建一个ant-scipt,它使用Jenkins在我的tomcat-server上构建、编译和部署我的GWT应用程序。为此,我使用来自catalina(catalina-ant.jar)的undeploy and deploy任务。但是我得到了这个错误: 构建失败d:\jenkins\jobs\homepageTomcat\workspace\BU

  • Fabric 是一个 Python 下类似于 Makefiles 的工具,但是能够在远程服务器上 执行命令。如果您有一个良好配置过的 Python 软件包 (大型应用) 且 对“配置”概念的理解良好,那么在外部服务器上部署 Flask 应用将会非常容易。 开始之前,请先检查如下列表中的事项是否都已经满足了: 在本地已经安装了 Fabric 1.0 。即这个教程完成时, Fabric 的最新版本。

  • Nuxt.js 允许你将静态化后的站点部署至任何静态站点托管服务中,例如 surge.sh。 部署至 surge.sh,需先安装 surge: npm install -g surge 然后, 我们需要告诉 Nuxt.js 生成应用的静态站点目录: npm run generate 上述的命令会生成一个 dist 目录,该目录包含了待部署的所有资源文件。 最后,我们可以通过下面的命令将站点布置至

  • Kubernetes的部署和状态集提供了在独立,分布式或共享模式下部署MinIO服务器的完美平台。 在Kubernetes上部署MinIO有多种选择,您可以选择最适合您的。 MinIO Helm Chart通过一个简单的命令即可提供自定义而且简单的MinIO部署。更多关于MinIO Helm部署的资料,请访问这里. 你也可以浏览Kubernetes MinIO示例 ,通过.yaml文件来部署Min

  • 问题内容: 我一直在使用Jenkins / Hudson CI来部署.NET网站项目。我一直在使用MSbuild插件来构建我的项目,然后使用xcopy将其复制到服务器上。 我注意到如果我在Visual Studio中 使用发布功能,则会得到一组不同的文件。我已经完成了配置转换,但最终得到了所有.cs文件,并且winmerge比较显示了二进制文件是不同的。 因此,我想让Jenkins像发布功能一样工

  • 目前我正在使用JBoss服务器部署我的JavaSpring代码。每次我对代码进行更改时,我所做的是 使用mvn clean install构建项目 将创建的war文件复制到\wildfly-10.1。0\独立\部署 使用$部署/独立的。sh——调试8787 这工作正常,但程序太长。有没有比使用Intellij IDE或其他方法更容易的方法。