Laravel 中的生产者-消费者逻辑如何工作?

问题描述 投票:0回答:1

例如,我想创建两个独立的项目,它们应该通过某个队列(例如rabbitmq)进行通信。 我是否正确理解,我只需在 Producer 项目中使用空

handle()
方法创建一些作业以防止自行处理,并在 consumer 项目中创建另一个同名作业并运行
php artisan queue:listen
。所以当我在
 Producer 
服务中执行 SomeJob::dispatch($payload); 时,rabbitmq 就会收到这份工作。之后,寻找传入消息的队列工作人员将收到消息,并在
consumer
项目中相应的
handle()
中调用 SomeJob。我对机制的理解正确吗?我忽略的主要事情是工人如何知道要调用什么
handle()
方法,特别是如果我们在不同的项目中使用不同的作业名称(是否可能)?

目前我正在项目中制作消费者机制,该机制将从队列接收消息。

laravel rabbitmq queue message-queue
1个回答
0
投票

最重要的是,两个应用程序都有同名的作业。生产者中的作业类只需要构造函数。处理函数仅在消费者上运行。

以下是创建发票时运行的作业示例:

作业/InvoiceCreatedJob.php。 - 关于制作人

/*
 * This job is called from InvoiceObserver:
 * public function created(Invoice $invoice): void
 * { InvoiceCreatedJob::dispatch($invoice->toArray());}
 */
class InvoiceCreatedJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(public array $data)
    {}
}

作业/InvoiceCreatedJob.php。 - 对消费者

class InvoiceCreatedJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(public array $data)
    {}

    public function handle(): void
    {
      //some code to handle invoice data
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.