当前位置: 首页 > 知识库问答 >
问题:

Laravel队列工作者、RabbitMQ和远程生成的运行作业

胡越泽
2023-03-14

我首先承认轻微的睡眠剥夺。

设置如下所示:

APIendpoint(服务器A)接收一个进线量,并将其添加到RabbitMQ服务器(服务器B)上的特定队列中。

RabbitMQ(服务器B)是简单的RabbitMQ队列服务器。不多也不少。

Laravel安装(服务器C)是我们实际的Laravel安装,其目的是在特定队列上查找作业并处理它们。

我们在Laravel安装中有一个RabbitMQ包,它允许通过RabbitMQ连接使用常规的Laravel队列机制。

我遇到的问题是,我们可以为队列生成一个worker,但是由于我们没有通过$job类生成作业(作业内容本身通常是一个JSON数组),所以Laravel安装不知道如何处理作业。

所以我的问题主要围绕着如何处理这样的场景。我认为在Laravel中使用队列功能并不能满足我的需要。你能看到我缺少的方法吗?我真的需要在非框架脚本上生成一个守护进程来处理这个问题吗?

非常感谢您的投入!

共有2个答案

华凡
2023-03-14

另一种方法是Laravel应用程序上的侦听器消耗JSON消息并对其执行操作。

可以使用以下包创建队列侦听器https://github.com/bschmitt/laravel-amqp(用于Laravel的通用AMQP桥接器)或https://github.com/needle-project/laravel-rabbitmq(一种更专门用于兔子的桥梁)。

然后,队列消费者读取JSON有效载荷,将有效载荷保存为适当的数据,然后决定在Laravel应用程序中分配哪些作业,由https://github.com/vyuldashev/laravel-queue-rabbitmq包处理。

这两个应用程序仍然与普通的JSON通信,而不是包含序列化作业类的面向Laravel的JSON。

苏嘉歆
2023-03-14

解决方案确实是将作业代码复制到发布作业的代码上。代码不需要作业实际运行所需的所有依赖项,因为它只从推送作业的依赖项序列化作业。

 类似资料:
  • 我有一个奇怪的问题Laravel队列:工作。在我的crontab中,我设置了一个工作,就像Laravel文档中描述的那样 在我的应用程序/控制台/Kernel.php我设置这个: 在我的正式服php工匠队列中:工作运行几秒钟,然后被“杀死”。这就是我所期望的。 在我的开发盒php artisan队列中:工作永远运行。因此,激活cron作业会产生php进程,直到整个内存被填满。 两个盒子都是Cent

  • 我目前正在尝试使用RabbitMQ(具有出色的RabbitMQBundle)来处理大量的异步工作。 目标是让一个队列发布相同类型的消息,并让多个服务器上的X个工作者在同一时间内查看消息。 每个工人都要偷看一条消息,完成工作,然后偷看另一条消息,等等。 这里是我的conf: 在我的consumer中,我有一个日志文件中的条目和120秒的睡眠。 我启动了php app/console rabbitmq

  • 我试图在容器启动并运行后运行以下命令。 " 然而,这完全破坏了我的容器启动。 我应该如何以Docker的方式来做这件事? 编辑: 使用docker-comact我添加了这一行到我的docker-compose.yml文件 容器启动了,但没有提供任何请求:S 使用此选项: 启动后容器停止运行 最终解决方案 所以最后我想,也许负责交付应用程序的服务器不应该是运行队列的服务器。 因此,我启动了同一doc

  • 我已经用RabbitMQ(3.7.6)设置了一个Laravel(5.6)应用程序,使用最新的Laradock和作曲家安装的https://github.com/vyuldashev/laravel-queue-rabbitmq。当我启动Laravel消息工作人员与我得到以下错误 但是,我可以使用telnet 127.0连接到Rabbit。0.1 5672(连接在不活动10秒后关闭)。听众似乎工作正

  • 我们有laravel 5.6和很多队列。 在生产中,我有一个主管负责处理这些队列。 在localhost上,我使用“sync”选项同步/直接处理所有队列。 我想知道是否有可能在localhost上有不同的行为: 我想分派作业,然后直接通过php exec运行以下命令: 这应该在后台运行队列工作程序一次。 但是什么都没发生。工匠在这种情况下工作吗?

  • 根据我的理解,ThreadpoolExecitor有两个主要的数据结构(工人,workQueue)用于管理tasks.worker(Set)有线程,这些线程将一直运行到执行器关闭,workerQueue将所有任务保留到执行器。但是根据代码,我没有看到所有任务都被添加到workQ中ueue.task仅在第1361行添加到队列中,不会在每种情况下都执行。