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

Laravel and SQS - Several connections in one request

我有一个 Laravel 应用程序 (iOS API) 可以将数据推送到 SQS 以在后台进行处理。根据请求,我们需要向 SQS 派遣 1 到 4 个作业。例如:

向SQS派发作业,由Worker处理:

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

总的来说,这些连接最终使其余请求花费的时间增加了一倍或三倍。 IE。 POST 到 /chat 可能需要大约 40-50ms,但是对于 SQS,它需要更像 100 - 120ms

]

我应该以不同的方式处理这个问题吗?有没有办法将这些批处理到 SQS,这样我们只需要连接一次而不是 3 次?

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

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

尽管 AWS SQS 本身不支持它,但结合 AWS Simple Notification Service,您实际上可以实现相同的目的。 Jeff Barr 不久前(2012 年)写了一篇关于使用 SNS 和 SQS 的扇出设置的文章 short blog post。它归结为向 SNS 发送通知,这将触发消息发布到多个 SQS 队列。

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

它在后台使用异步和 sendMessageBatch