使用laravel队列和作业在两个不同的laravel应用程序之间进行通信

dddzy1tm  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(153)

我使用不同的laravel应用程序作为微服务。
如laravel应用1(管理员)和laravel应用2(用户)。
有一些作业需要从laravel app1推到队列中,这些作业需要通过从队列中拉出来在laravel app2中进行处理。
两个应用程序源代码不同。
我面临的问题是,需要处理的作业(例如ProcessPodcast作业)需要在laravel app2中定义,因为它将在laravel app2中处理。
但是,由于类ProcessPodcast在laravel app1中不可用,我如何将此作业从laravel app1推送到队列(我在这里使用的是redis)?
ProcessPodcast::dispatch($payload);
正如您所看到的,作业是如何被推入队列的,如上所述,使用作业名称ProcessPodcast。但ProcessPodcast类在laravel app1中不存在,那么如何将作业请求发送到laravel app2?

fcg9iug3

fcg9iug31#

我认为你可以使用Redis的pub/sub逻辑。
例如:

//app1
Redis::subscribe(['handle-queue-channel'], function ($message) {
   $data = json_decode($message,true);

   dispatch(new $data['class'](...$data['parameters']))
});

//app2
Redis::publish('handle-queue-channel', json_encode([
     'class' => 'App\Workers\PodcastWorker',
     'parameters' => [...$whatYouSendWorkerConstructor]
]));

相关问题