我有一个Laravel应用程序(iOS API)将数据推送到SQS以在后台处理。根据要求,我们需要从1到4个工作岗位调度到SQS。例如:
向SQS派遣工作,由工人处理:
问题是,我们可能会有像#34; chat&#34;这样的功能,就服务器处理而言,这是一个非常轻松的请求,但它需要连接到SQS三次才能发送:< / p>
总的来说,这些连接最终会使剩余请求所花费的时间增加一倍或三倍。即。发布到/chat
可能需要 40-50ms ,但是对于SQS,它需要更多像 100 - 120ms
我应该以不同的方式接近这个吗?有没有办法批量处理SQS,所以我们只需要连接一次而不是3次?
答案 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
。