基于 EasySwoole 实现通用队列

22 篇文章 1 订阅
该博客介绍了如何基于EasySwoole库创建一个通用队列系统,支持Redis延迟队列和普通队列以及MemcacheQ。通过Composer安装依赖后,定义消费者类并注册服务,可以实现数据消费的日志保留和异常情况下的数据保护。此外,还展示了如何生产消息以及使用不同的驱动进行队列操作。
摘要由CSDN通过智能技术生成

基于 EasySwoole 实现通用队列

  • 支持消费数据先落盘防止异常丢失数据
  • 支持队列数据消费日志保留
  • 支持基于Redis延迟队列
  • 支持基于Redis的队列
  • 支持MemcacheQ

后续会支持更多消息中间件的消费驱动

安装

composer require huizhang/universal-queue

定义消费者

<?php
namespace App\DelayQueue;

use Huizhang\UniversalQueue\Core\ConsumerAbstract;

class DelayQueue1 extends ConsumerAbstract
{

    public $queue;

    public function deal(array $data)
    {

    }

}

服务注册

<?php
namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\Redis\Config\RedisConfig;
use Huizhang\UniversalQueue\Driver\RedisDelayQueue;
use Huizhang\UniversalQueue\Driver\RedisQueue;
use Huizhang\UniversalQueue\Driver\MemcacheQ;
use Huizhang\UniversalQueue\UniversalQueue;
use App\DelayQueue\DelayQueue1;

class EasySwooleEvent implements Event
{

    public static function initialize()
    {
        // TODO: Implement initialize() method.
        date_default_timezone_set('Asia/Shanghai');
    }

    public static function mainServerCreate(EventRegister $register)
    {
        // TODO: Implement mainServerCreate() method.
        $redisConfig = new RedisConfig();
        \EasySwoole\RedisPool\RedisPool::getInstance()->register(
            $redisConfig,
            'redis1'
        );
        $config = \Huizhang\UniversalQueue\Config::getInstance()
            ->setQueues([
                // redis 延迟队列
                'redis_delay_queue' => [
                    'limit' => 3, // 每个协程取出的最大消息数
                    'driver' => new RedisDelayQueue(), // 队列驱动
                    'consumer' => new DelayQueue1(), // 消费者
                    'coroutineNum' => 1, // 协程数
                    'retainLogNum' => 3, // 消费日志最大保存个数(以小时分割)
                    'driverConfig' => [
                        'redisAlias' => 'redis1', // 延迟队列redis所需配置
                        'delayTime' => 3 // 延迟时间
                    ]
                ],
                // redis 队列
                'redis_queue' => [
                    'limit' => 3, // 每个协程取出的最大消息数
                    'driver' => new RedisQueue(), // 队列驱动
                    'consumer' => new DelayQueue1(), // 消费者
                    'coroutineNum' => 1, // 协程数
                    'retainLogNum' => 3, // 消费日志最大保存个数(以小时分割)
                    'driverConfig' => [
                        'redisAlias' => 'redis1'
                    ]
                ],
                // memcacheq
                'mcq' => [
                    'limit' => 3, // 每个协程取出的最大消息数
                    'driver' => new MemcacheQ(), // 队列驱动
                    'consumer' => new DelayQueue1(), // 消费者
                    'coroutineNum' => 1, // 协程数
                    'retainLogNum' => 3, // 消费日志最大保存个数(以小时分割)
                    'driverConfig' => [
                        'servers' => [
                            '0.0.0.0:11211:3',
                            '0.0.0.0:11211:3',
                        ]
                    ]
                ],
            ]);
        UniversalQueue::getInstance($config)->attachServer(ServerManager::getInstance()->getSwooleServer());
    }

}

生产消息

    UniversalQueue::getInstance()->push('redis_delay_queue', 123);

驱动

  1. redis 延迟队列

use Huizhang\UniversalQueue\Driver\RedisDelayQueue;

  1. redis 队列

use Huizhang\UniversalQueue\Driver\RedisQueue;

  1. MemcacheQ

use Huizhang\UniversalQueue\Driver\MemcacheQ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值