Laravel使用AWS队列的多个服务器

时间:2017-02-28 21:53:47

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

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

  • 是否有可能多次处理作业?
  • 是否有任何设置方法,因此将作业放入队列的同一台服务器处理作业(想想文件首先存储在磁盘中的文件上传)。

对此类设置的任何经验/提示/建议表示赞赏。

2 个答案:

答案 0 :(得分:2)

  

是否有任何方法可以设置相同的服务器来放置作业   在队列中处理作业(想想文件上传的位置)   首先存储在磁盘中。)

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

您可以通过每台服务器上的.env配置文件执行此操作。

答案 1 :(得分:2)

  

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

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

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

  

是否有任何设置方法,以便将作业放入队列的同一台服务器处理作业(想想文件首先存储在磁盘中的文件上传。)

根据劳伦斯的建议,您可以为每个实例设置单独的队列。