# queue **Repository Path**: icy8/queue ## Basic Information - **Project Name**: queue - **Description**: 任务队列,用于发布、消费程序任务。 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-30 - **Last Updated**: 2022-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # queue #### 介绍 任务队列,用于发布、消费程序任务。 这是基于`think-queue`照葫芦画瓢的作品,很多基本的原理都来自`think-queue`。 因为运行过程跟定时任务比较类似,所以我更喜欢称其为任务队列。 #### 软件架构 1. `php>=7.0` 2. `symfony/process` #### 安装教程 `````shell composer require icy8/queue ````` #### 使用说明 1. 监听/消费任务 因为`think-queue`的消费进程是基于`think`命令的,我们并不希望把`thinkphp`的其他依赖牵扯进来。 所以定制了一个可以自定义消费进程的方法`makeProcess`,他可以让你调用任何php进程来消费任务,方法参数只接受`string`和`Process`对象。 ```php execInterval = '0.1'; // 定制自己的消费进程 /*$listener->makeProcess('"6399", "password"=>"123456"]); $exec->runNext();');*/ // 开始监听队列 $listener->run(); ``` 2. 发布任务 ```php init(); // 任务立即执行 $connection->push(\icy8\Queue\test\JobTest::class, ['a', 'b', 'c']); // 运行任务类的自定义方法 $connection->push([\icy8\Queue\test\JobTest::class, 'custom'], '自定义方法'); // 延迟任务 $connection->pushDelay(\icy8\Queue\test\JobTest::class, ['a', 'b', 'c'], 3); ``` 3. 其他说明 - 核心的两部分是消费和发布,而消费的核心是`\icy8\Queue\Executor`,所以你完全可以不使用`icy8\Queue\Listener`。 - 为什么使用`symfony/process`:主要是涉及到热更新的问题,没想到、没找到其他更好的办法。 - redis的配置写得比较乱,需要优化。