兩個專案用訊息佇列通訊

1711293058發表於2020-03-15

1.需求

專案A傳送任務到佇列,專案B消費任務執行業務操作

2.注意點

1.兩個專案需要同一個queue的connection
2.任務生產者和任務訂閱者配置同一個佇列名稱{queue}
3.任務生產者和任務訂閱者有一個相同的job,類名和配置一樣,不一樣的是handle裡面的內容。
4.任務訂閱者監聽的時候要指定引數–queue={queue}
5.為了減少程式碼耦合度,訊息使用陣列而不要使用具體物件

3. 專案A

3.1 OrderJob

<?php

namespace App\Jobs;

class NewOrderJob extends Job
{

    public $queue = 'new_order';
    public $data;

    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function handle()
    {
        echo "不會執行";
    }

}

3.2 釋出任務

 dispatch(new NewOrderJob(["a" => "b"]));

4 專案B

<?php

namespace App\Jobs;

class NewOrderJob extends Job
{

    public $queue = 'new_order';
    public $data;

    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function handle()
    {
        dump($this->data);

        echo "專案B執行NewOrderJob";
    }

}

4.1 監聽任務

php artisan queue:work --queue=new_order

#...
#專案B執行NewOrderJob[2020-03-15 17:28:37]
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章