注意需要在Linux环境下运行 该扩展为官方扩展,系统默认的队列驱动为redis,请自行安装redis,更多驱动请查看yii2-queue官方说明
Qimall 在/qimall/services/common/RabbitMqService.php把 RabbitMq封装成Service,封装有链接方法connect(),生成一个消息和一个指定push()、延迟消息delay()、消费者监听listen()、取出一个消息pull()、延迟后重试retry(),生成一个信息IDcreateMessageId()、设置消息信息setMessage()、判断消息是否存在(不存在:已消费)checkMessage()、消息消费完,删除deleteMessage()。
下面是将任务添加到队列:
/**
* 生产一个消息并发送到指定(direct)交换机
* @Author bing
* @DateTime 2021-02-24 15:28:47
* @copyright: Copyright (c) 2020 广东七件事集团
* @param string $exchange
* @param string $queue_name 队列名称
* @param array $data 数据
* @param string $handler_class 类
* @param string $method 方法
* @param Closure $error_callback 错误回调
* @param Closure $success_callback 成功回调
* @param string $exchange_type 交换机类型:默认直连交换机
* @throws Exception
* @return int
*/
$res = Yii::$app->services->rabbitMq->push($exchange,$queue_name,$data,$handler_class,$method, $error_callback, $success_callback,$exchange_type)
将作业推送到队列中延时5分钟运行:
/**
* 延时队列生产
* @notice:此延时队列不能保证时间的精准,当业务处理出现阻塞,则在队列里已达到过期时间的消息并不会被发送到对应的队列。
* @Author bing
* @DateTime 2021-02-24 16:49:31
* @copyright: Copyright (c) 2020 广东七件事集团
* @param int $sec 延时秒数
* @param array $data 传递的数据
* @param string $handler_class 处理类
* @param string $method 处理方法
* @param array $params 处理类参数
* @throws Exception
* @return void
*/
$res = Yii::$app->services->rabbitMq->delay($sec, $data, $handler_class, $method, $params);
更多使用方法在RabbitMq使用方法在服务类里面有详细的介绍【RabbitMq服务类】