PHPackages                             xd/queue-consumers-manager - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. xd/queue-consumers-manager

ActiveLibrary[Queues &amp; Workers](/categories/queues)

xd/queue-consumers-manager
==========================

1.2(10y ago)419MITPHP &gt;=5.4.0

Since Jun 21Compare

[ Source](https://github.com/ganxiangdong/php-consumers-manager)[ Packagist](https://packagist.org/packages/xd/queue-consumers-manager)[ Docs](https://github.com/ganxiangdong/php-consumers-manager)[ RSS](/packages/xd-queue-consumers-manager/feed)WikiDiscussions Synced today

READMEChangelog (1)DependenciesVersions (2)Used By (0)

consumers manager
=================

[](#consumers-manager)

一个简单的队列消费者进程管理轮子，主要为了解决平滑重启、平滑关闭、进程自动平滑重启等问题

原理
--

[](#原理)

本想用信号量来控制进程，实测此方案会出现业务闪断（在收到信号量时，php会断掉当前正在阻塞的语句，可能会导致调用api或执行sql等阻塞操作的中断），因此本项目采用了文件的方式来控制进程。进程自重启是为了防止进程内存泄露的问题，您可以配置一个进程最多消费多少次队列消息后重启，进程会记录处理消费数量，达到最大值便会重新拉起一个进程并退出当前进程，由于新拉起的进程是直接使用的exec函数，且直接执行php命令，因此需要开放exec函数且php已存在于环境变量中

依赖
--

[](#依赖)

php &gt;= 5.4 (理论上是&gt;=5.3即可，我没有此环境且版本太老就没验证)
posix 扩展 此扩展不是必须的，只是在记录运行日志时会详细到某一个pid

安装
--

[](#安装)

composer地址：

权限
--

[](#权限)

由于采用了文件方式来控制进程，所以需要给目录data读写权限

示例
--

[](#示例)

1. 创建一个消费者

    ```
    class myConsumer extends \Xd\QueueConsumersManager\Consumer
    {
        //开始运行,当队列开始后会调用此方法
        public function run()
        {
            //模拟获取,消费队列消息
            while(true) {
                sleep(2);//模拟处理业务的耗时处理
                \Xd\QueueConsumersManager\Manager::noticeFetchedQueueMsg();
            }
        }

        /**
         * 关闭consumer
         */
        public function shutdown()
        {
            //关闭连接等处理
        }
    }

    $myConsumer = new myConsumer();

    $consumerManager = \Xd\QueueConsumersManager\Manager::getInstance($myConsumer);
    $consumerManager->receivedMax = 1000;//设置每个consumer最多请求多少次消息后重启,默认为1000
    $consumerManager->run();

    ```
2. 启动
    执行对应vendor包中的start.sh, 第三个参数为消费者脚本路径（目前只支持绝对路径），第四个参数为开启的进程个数，运行后中途可以随意再增加，运行日志的名称为consumer脚本的文件名+.log，位于/var/log目录下

    ```
    sh vendor/xd/queue-consumers-manager/bins/start.sh /www/queue/test.php 10

    ```

    输出

    ```
     consumer运行日志文件:/var/log/test.php.log
     正在启动第1个进程...
     正在启动第2个进程...
     正在启动第3个进程...
     正在启动第4个进程...
     正在启动第5个进程...
     正在启动第6个进程...
     正在启动第7个进程...
     正在启动第8个进程...
     正在启动第9个进程...
     正在启动第10个进程...
     启动完成

    ```
3. 查看运行状态
    执行对应vendor包中的status.sh, 第三个参数为消费者脚本路径（目前只支持绝对路径）

    ```
    sh vendor/xd/queue-consumers-manager/bins/status.sh /www/queue/test.php

    ```

    输出

    ```
     当前共有 10个 consumer运行,如果下面展示的consumer行数在多次查看状态下一直少于此数量,则有可能存在consumer阻塞死了
     状态说明:第一列:开始时间,第二列:运行时间,第三列:请求队列数次,第四列:使用内存,第五列:内存峰值
     正在等待进程反馈状态,获取到结果后会自动依次展示在下文,请稍候...

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:19 | 2分钟   | 87次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:21 | 2分钟   | 86次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:13 | 3分钟   | 90次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:17 | 2分钟   | 88次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:15 | 2分钟   | 89次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:22 | 2分钟   | 86次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:20 | 2分钟   | 87次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:14 | 3分钟   | 90次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:16 | 2分钟   | 89次            | 853.9 KB | 865.9 KB |

     --------------------------------------------------------------------------
     | 2016-05-30 10:45:18 | 2分钟   | 88次            | 853.9 KB | 865.9 KB |

    ```
4. 关闭
    执行对应vendor包中的shutdown.sh, 第三个参数为消费者脚本路径（目前只支持绝对路径）

    ```
    sh vendor/xd/queue-consumers-manager/bins/shutdown.sh /www/queue/test.php

    ```

    输出

    ```
    还有10个进程等待关闭,请稍候...
    还有5个进程等待关闭,请稍候...
    已完成关闭!

    ```

###  Health Score

26

—

LowBetter than 41% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3661d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10627214?v=4)[ganxiangdong](/maintainers/ganxiangdong)[@ganxiangdong](https://github.com/ganxiangdong)

---

Top Contributors

[![ganxiangdong](https://avatars.githubusercontent.com/u/10627214?v=4)](https://github.com/ganxiangdong "ganxiangdong (5 commits)")

---

Tags

queuerestartconsumerssmoothshutdown

### Embed Badge

![Health badge](/badges/xd-queue-consumers-manager/health.svg)

```
[![Health](https://phpackages.com/badges/xd-queue-consumers-manager/health.svg)](https://phpackages.com/packages/xd-queue-consumers-manager)
```

###  Alternatives

[php-amqplib/php-amqplib

Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.

4.6k129.9M974](/packages/php-amqplib-php-amqplib)[ramsey/collection

A PHP library for representing and manipulating collections.

1.2k513.6M83](/packages/ramsey-collection)[queue-interop/queue-interop

Promoting the interoperability of MQs objects. Based on Java JMS

48131.3M95](/packages/queue-interop-queue-interop)[enqueue/enqueue

Message Queue Library

19020.5M62](/packages/enqueue-enqueue)[enqueue/amqp-tools

Message Queue Amqp Tools

14621.6M12](/packages/enqueue-amqp-tools)[phootwork/collection

The phootwork library fills gaps in the php language and provides better solutions than the existing ones php offers.

3927.1M15](/packages/phootwork-collection)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
