两个项目用消息队列通信
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 协议》,转载必须注明作者和本文链接
如果两个项目需要使用队列。建议需要修改下底层代码。不能使得两个项目都依赖于 Laravel 的数据结构。 而是应该自定义好数据结构。两个项目是实现它
我用的rabbitmq, 代码也是楼主的这样, 委屈rabbitmq了,楼上的建议很好,就是不会改,唉, 流下了没技术的眼泪 :joy:
直接使用
Queue:push()
这样就能解决laravel自带的命令空间问题了,我们一直用的是rabbitmq