Yii queue实现对列,延迟消息
1、安装
composer require --prefer-dist yiisoft/yii2-queue
2、配置
common/config/main.php
'bootstrap' => ['log','queue'],
'components' => [
'log' => [
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'redis' => require(__DIR__ . '/redis.php'),
'queue' => [
'class' => \yii\queue\redis\Queue::class,
'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log
'redis' => 'redis', // 连接组件或它的配置
'channel' => 'queue', // queue channel key
],
],
3、创建 common/jobs/OrderCancelJob
namespace app\common\jobs;
use yii\queue\JobInterface;
use yii\base\BaseObject;
class OrderCancelJob extends BaseObject implements JobInterface
{
public $orderId;
/**
* @param Queue $queue which pushed and is handling the job
*/
public function execute($queue)
{
$t = \Yii::$app->db->beginTransaction();
try {
$order_id = $this->orderId;
//根据订单编号处理业务逻辑
$t->commit();
} catch (\Exception $exception) {
$t->rollBack();
}
}
}
4、监听队列
yii queue/listen
5、使用对列
//直接使用
Yii::$app->queue->push(new OrderCancelJob(['orderId' => 'XXX']));
//5分钟之后执行
Yii::$app->queue->delay(5*60)->push(new OrderCancelJob(['orderId' => 'XXX']));
6、启用多进程
可以使用supervisor或systemd 来启动多进程worker
supervisor具体方法前面文章已详细讲解
https://ormcc.com/article/20
以上就是具体实现方法