我正在研究Laravel应用程序的日志记录方面,amd计划将数据发送到SQS以便以后检索。但是,我想将作业从我的生产服务器发送到AWS Queue,但是让Queue在一个单独的Logging服务器上工作,该服务器监听队列。
我理解如何设置队列工作者来监听队列,但是,Laravel的工作是自我处理的。因此,当Logging服务器上的worker从SQS检索消息时,它将在同一名称空间(具有相同的Class名称)中查找作业来处理它。有没有办法以不同的方式处理这个问题,或者我只需要在Logging服务器上命名Job Handler,就像生产服务器上的Job Dispatcher一样。
答案 0 :(得分:1)
您可以为每个特定服务器创建不同的队列,并根据它们必须执行的位置在其中一个上发送每个作业。
基本上,这是如何在特定队列上推送作业:
$job = (new SendReminderEmail($user))->onQueue('emails');
以下是处理特定队列中作业的命令:
php artisan queue:listen --queue=emails
希望有所帮助
答案 1 :(得分:0)
我面临类似的挑战。由于我们在应用程序中使用了Docker容器,因此我们定义了专用的 worker服务,该服务与Web应用程序共享一个卷。此工作程序服务使用非常简单的映像,并带有管理者以使用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类,因此只要它们与签名匹配,它就可以工作。