Laravel和SQS - 一次请求中的多个连接

时间:2017-04-15 15:06:59

标签: php laravel amazon-web-services amazon-sqs

我有一个Laravel应用程序(iOS API)将数据推送到SQS以在后台处理。根据要求,我们需要从1到4个工作岗位调度到SQS。例如:

向SQS派遣工作,由工人处理:

  • 用于连接套接字服务(Pusher)
  • 用于连接Apple的APNS服务(推送通知)
  • 用于向Loggly发送数据以进行基本的集中请求记录
  • 用于将分析数据存储在SQL数据库中(暂时)

问题是,我们可能会有像#34; chat&#34;这样的功能,就服务器处理而言,这是一个非常轻松的请求,但它需要连接到SQS三次才能发送:< / p>

  • 1)套接字推送到所有设备
  • 2)分析处理
  • 3)集中请求/错误记录

总的来说,这些连接最终会使剩余请求所花费的时间增加一倍或三倍。即。发布到/chat可能需要 40-50ms ,但是对于SQS,它需要更多像 100 - 120ms

我应该以不同的方式接近这个吗?有没有办法批量处理SQS,所以我们只需要连接一次而不是3次?

2 个答案:

答案 0 :(得分:1)

正如Michael在评论中所建议的那样,一种方法是使用sendMessageBatch请求向一个队列发送最多10条消息。当你使用多个队列时,即使你不是,也可能有另一种方法。

如果您可以将所有不同的消息视为同一个元素,即向任意接收者发出动作通知,您将发现自己处于扇出模式。这是一种常用的模式,其中多个接收器需要对单个消息进行操作,即单个动作。

虽然AWS SQS本身不支持它,但结合AWS Simple Notification Service,您实际上可以实现相同的目标。 Jeff Barr在前一段时间(2012年)使用SNS和SQS编写了关于扇出设置的short blog post。归结为向SNS发送通知,该通知将触发要在多个SQS队列上发布的消息。

答案 1 :(得分:0)

如果有人好奇,我发布了一个 MIT 包来批量调度:) https://packagist.org/packages/atymic/laravel-bulk-sqs-queue

它在底层使用异步和 sendMessageBatch