## 消息队列 > 注意需要在Linux环境下运行 该扩展为官方扩展,系统默认的队列驱动为redis,请自行安装redis,更多驱动请查看yii2-queue官方说明 > > Qimall 在/qimall/services/common/RabbitMqService.php把 RabbitMq封装成Service,封装有链接方法connect(),生成一个消息和一个指定push()、延迟消息delay()、消费者监听listen()、取出一个消息pull()、延迟后重试retry(),生成一个信息IDcreateMessageId()、设置消息信息setMessage()、判断消息是否存在(不存在:已消费)checkMessage()、消息消费完,删除deleteMessage()。 下面是将任务添加到队列: ```php /** * 生产一个消息并发送到指定(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分钟运行: ```php /** * 延时队列生产 * @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服务类】](../service/serv-rabbitmq.md)