【问题标题】:How to batch read sqs messages inside beanstalk worker如何在beantalk worker中批量读取sqs消息
【发布时间】:2018-06-15 11:26:56
【问题描述】:

我们在弹性 beanstalk 上运行的 Web 应用程序将传入请求的活动记录到数据库中。我们希望将 dB 记录与请求处理路径分离,以便加快响应时间。我们决定使用 sqs 队列和 beanstalk worker。想法是将日志事件排队到 sqs,让工作人员接收事件并让它记录到 dB。

现在需要优化 dB 记录操作并避免为队列中的每条消息创建一个连接。据我了解,sqs 守护进程会为每条消息调用工作人员,有没有办法让守护进程批量发送消息,以便只有一条消息,并且它的正文包含所有消息的内容?

或者我们是否需要使用辅助队列或编写自定义 sqs 消息聚合器来处理队列中的 n 条消息,然后将一批消息发送到另一个队列,然后将其写入 dB 一次?

我们正在使用 php 和 mysql

【问题讨论】:

    标签: php amazon-web-services amazon-elastic-beanstalk amazon-sqs


    【解决方案1】:

    根据我的经验,默认情况下您不能。守护程序为每条消息调用您的应用程序。 您可以做的可能是在文件中本地缓存消息(假设您使用的是单个实例而不是自动缩放一个)(锁定系统以进行多处理),然后使用 ELB cronjob 的调度从文件中检索信息然后每隔一定时间进行一次数据库操作。因此,您可以批量执行该数据库操作。

    如果您想对多个实例使用 Auto Scaling,您可能需要使用另一个消息传递,这与另一个选项相比是一种浪费。此选项是您使用基于 aws sdk 的代码编写自己的代码,以批量从 SQS 接收/删除,然后更新您的数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      相关资源
      最近更新 更多