Laravel - 在一台服务器上发送作业,在另一台服务器上处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel - 在一台服务器上发送作业,在另一台服务器上处理相关的知识,希望对你有一定的参考价值。

我正在研究Laravel应用程序的日志记录方面,我计划将数据发送到SQS以便以后检索。但是,我想将作业从我的生产服务器发送到AWS Queue,但是然后让一个Queue在一个单独的Logging服务器上工作,该服务器监听Queue。

我理解如何设置队列工作者来监听队列,但是,Laravel的工作是自我处理的。因此,当Logging服务器上的worker从SQS检索消息时,它将在同一名称空间(具有相同的Class名称)中查找作业来处理它。有没有办法以不同的方式处理这个问题,或者我只需要在Logging服务器上命名Job Handler,就像生产服务器上的Job Dispatcher一样。

答案

您可以为每个特定服务器创建不同的队列,并根据它们必须执行的位置在其中一个上发送每个作业。

基本上,这是如何在特定队列上推送作业:

$job = (new SendReminderEmail($user))->onQueue('emails');

这是从特定队列处理作业的命令:

php artisan queue:listen --queue=emails

希望能帮助到你

另一答案

我遇到了类似的挑战。由于我们在应用程序中使用docker容器,因此我们定义了一个专用的工作服务,它与Web应用程序共享一个卷。此工作服务使用带有supervisord的非常简单的图像来使用Web应用程序推送的作业。通过这种方式,我们可以在两个服务之间共享作业类,并可以单独扩展工作服务。

这是docker-compose文件的示例:

version: '2'

services:
  web:
    image: ${AWS_ACC}.dkr.ecr.us-east-1.amazonaws.com/nginx-php:1.0
    env_file:
      - "env.list.${APP_ENV}"
    ports:
     - 80:80
     - 443:443
    tty: true
    volumes:
     - ${PWD}:/var/www/html

  worker:
    image: ${AWS_ACC}.dkr.ecr.us-east-1.amazonaws.com/php-worker:1.0
    env_file:
      - "env.list.${APP_ENV}"
    tty: true
    volumes:
     - ${PWD}:/var/www/html
    depends_on:
      - web
...

我想到的另一个可能的解决方案是使用git子模块在两个项目之间共享作业类。由于laravel只是序列化Job类,只要它们与签名匹配,它就应该有效。

以上是关于Laravel - 在一台服务器上发送作业,在另一台服务器上处理的主要内容,如果未能解决你的问题,请参考以下文章

C#.NET 在一台机器上加密 XML 并在另一台机器上解密

为啥我的 Perl 程序在一台机器上得到污染警告,而在另一台机器上却没有?

getResource 在一台服务器上返回 null 但在另一台服务器上不返回

php 在一台机器上解析失败,但在另一台机器上解析失败

VBS 在一台服务器上运行 .xlsm 工作簿中的 VBA 宏,但在另一台服务器上运行良好

为啥 load_ps() 可以在一台 PC 上工作,而不能在另一台 PC 上工作?