• easyswoole中队列的使用


    easyswoole中队列的使用

        队列的使用其实在easyswoole官方文档中已经有相关介绍,但是它只给了一个Redis驱动示例,以此来说明队列的使用流程。实际开发中,这个还不能拿来直接用。下面记录一下在实际项目中是如何使用队列。

    1、Queue介绍

        Easyswoole封装实现了一个轻量级的队列,默认以Redis作为队列驱动器。可以自己实现一个队列驱动来实现用kafka或者启动方式的队列存储。

        从上可知,Queue并不是一个单独使用的组件它更像一个对不同驱动的队列进行统一封装的门面组件

    2、安装

    composer require easyswoole/queue

    3、使用

    队列的使用流程分三个步骤:注册队列驱动器、设置消费进程、生产者投递任务

    1)注册队列驱动器

     在EasySwooleEvent.php中的mainServeCreate()中注册:

     1     public static function mainServerCreate(EventRegister $register)
     2     {
     3         $confInstance = EasySwooleEasySwooleConfig::getInstance();
     4 
     5         // 注册热重启
     6         $swooleServer = ServerManager::getInstance()->getSwooleServer();
     7         $swooleServer->addProcess((new HotReload('HotReload', ['disableInotify' => false]))->getProcess());
     8         
     9         static::registerOrmPool($confInstance, 'MYSQL', 80, 160, 'default');        // 注册v1.0的数据库pool
    10         static::registerOrmPool($confInstance, 'MYSQL_READ', 80, 160, 'read');        // 注册v1.0的read数据库pool
    11 
    12         static::registerRedisPool($confInstance, 'REDIS', 10, 80, 'redis');        // 注册redis链接池
    13 
    14         //注册队列驱动器
    15         $driver = static::registerQueue($confInstance, 'REDIS', 'queue-depart');
    16         DepartmentQueue::getInstance($driver);
    17 
    18         //设置消费进程
    19         ServerManager::getInstance()->addProcess(new SyncDepartment());
    20     }

    2)设置消费进程

      比如这里的:

      ServerManager::getInstance()->addProcess(new SyncDepartment());

      SyncDepartment类必须继承AbstractProcess类,在重新实现的run()方法中自定义消费的相关业务处理

      SyncDepartment.php代码如下:

     1 class SyncDepartment extends AbstractProcess
     2 {
     3     public function run($arg)
     4     {
     5         // TODO: Implement run() method.
     6         go(function () {
     7             AppQueueDepartmentQueue::getInstance()->consumer()->listen(function (EasySwooleQueueJob $job) {
     8                 set_time_limit(0);
     9                 $data        = $job->getJobData();
    10                 $access_token = $data['access_token'];
    11                 $type = $data['type'];
    12                 DepartmentLogic::getAllDepartmentsFromZw($access_token,$type);
    13             });
    14         });
    15     }
    16 
    17 }

    3)生产者投递任务

     场景举例一:

     

     

    场景举例二:

     

     关键代码贴上:

    1             $job  = new Job();
    2             $data = ['access_token' => $access_token,'type'=>1];
    3             $job->setJobData($data);
    4             DepartmentQueue::getInstance()->producer()->push($job);

    参考链接:https://www.easyswoole.com/Cn/Components/Queue/install.html

     

     

  • 相关阅读:
    O-C相关-06:对象与对象的关系
    O-C相关05:方法的封装.
    O-C相关04:类方法的概述与定义和调用
    Objective-C发展历史
    O-C相关-03:面向对象概念的具体介绍
    OC相关-02:oc和c的基本差异
    0-C相关01:NSlog函数介绍。
    鞭辟入里
    objective-c中字符串长度计算
    OC多文件开发介绍
  • 原文地址:https://www.cnblogs.com/hld123/p/13864808.html
Copyright © 2020-2023  润新知