Laravel 多个服务器与 AWS 队列一起使用

问题描述 投票:0回答:3

我有 Laravel 应用程序在两台服务器上运行(使用负载均衡器),我想知道如果我将作业放入 AWS SQS 队列并且两台服务器都订阅了该队列,会发生什么。

  • 该作业是否有可能被多次处理?
  • 有什么方法可以进行设置,以便将作业放入队列的同一服务器处理该作业(想想文件上传首先存储在磁盘中的位置)。

任何有关此类设置的经验/提示/建议都值得赞赏。

laravel amazon-web-services amazon-sqs
3个回答
3
投票

该作业是否有可能被多次处理?

是的,SQS只保证至少一次交货。您应该构建应用程序以允许传递消息的多个副本。 http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html#standard-queues-at-least-once-delivery

解决此问题的方法通常是拥有一个可以锁定消息的唯一标识符的服务。这样你就可以限制关键部分。

有什么方法可以进行设置,以便将作业放入队列的同一服务器处理该作业(考虑文件上传,文件首先存储在磁盘中)。

按照 Laurence 的建议,您可以为每个实例拥有单独的队列。


2
投票

有什么方法可以设置东西,以便放置作业的同一服务器 队列中处理该作业(认为文件上传的位置 首先存储在磁盘中)。

只需将每台服务器配置为使用自己的 SQS 队列 - 而不是共享同一个队列。这样您就 100% 知道推送作业的服务器就是处理该作业的服务器。

您可以通过每台服务器上的

.env
配置文件来完成此操作。


0
投票

事实并非如此,一旦从任何一台服务器中删除(检索)作业,它就会立即从 aws sqs 队列中删除,因此队列中的作业不会运行多次。

© www.soinside.com 2019 - 2024. All rights reserved.