PHPackages                             fly-cms/mysql-queue - 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. fly-cms/mysql-queue

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

fly-cms/mysql-queue
===================

Webman plugin fly-cms/mysql-queue

v1.0.2(2y ago)08MITPHPPHP &gt;=7.0

Since Jun 4Pushed 2y ago1 watchersCompare

[ Source](https://github.com/settime/mysql-queue)[ Packagist](https://packagist.org/packages/fly-cms/mysql-queue)[ RSS](/packages/fly-cms-mysql-queue/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (3)Dependencies (1)Versions (4)Used By (0)

基于webman加mysql实现的可视化简易版消息队列
===========================

[](#基于webman加mysql实现的可视化简易版消息队列)

介绍
--

[](#介绍)

基于webman + mysql 实现的简易消息队列.
前面使用reids消息队列部署到服务器上的时候,第一次启动的时候,由于自己配置没配好,导致启动出现异常 然后把配置改好了,再次启动后却发现某一个消息队列无法执行了,调试打印添加啥的乱搞一通都没有任何反应,后面实在找不出问题出在哪了,想着要不换个名称试试看,结果换了名称直接就正常了.
正是基于这个背景下,我觉得它可能不是我想要的消息队列,于是开发了这个简易版的可视化消息队列组件,

#### 如果你想使用该组件的话,请仔细阅读并理解清楚它的特性再决定

[](#如果你想使用该组件的话请仔细阅读并理解清楚它的特性再决定)

1 从程序的逻辑上来说,基本可以保证数据不会丢失
2 服务端无法支持分布式跟多进程，消费端分布式的话必须保证时间与服务端保持一致，不然会导致消息无法推送
3 同一个队列只能说基本能按顺序执行，反过来听就是不保证他能按顺序执行,例如后发先至、推送失败重试等等是没法保证消息按入队顺序执行的
4 不保证只推送一次,重要数据消费里必须做好幂等性.
5 不管你开多少个消费者,同一类型队列,同一次推送只会有一条消息推送执行
6 性能的话,取决于你服务器情况,我在自己这实测的话,2核的轻量服务器,写入1000条左右耗时1.2秒左右,加上同时进行消费,服务器占用率已经达到60%了,所以仅建议小项目用，有高并发的话，请使用专业的消息队列。

安装
--

[](#安装)

```
composer require fly-cms/mysql-queue
```

基础配置
----

[](#基础配置)

```

return [
    'enable' => true,
    'token' => '123456', //通讯认证钥匙,请务必更改
    'queue_register_address' =>    [
        'lanip' => '127.0.0.1',
        'port' => '8773',
    ],//队列注册地址,自定义
    'consumer_register_address' => 'text://127.0.0.1:8774',//消费者注册地址,必须对应process文件 mysql-queue-server里面的监听地址
    'timeout' => 3600,//超时多久放弃
    'max_attempts'  => 6, // 消费失败后，重试次数
    'retry_seconds' => 5, // 重试间隔，单位秒
    'mysql_query' => \FlyCms\MysqlQueue\handle\Mysql::class,//mysql操作类
];

```

配置进程
----

[](#配置进程)

打开process.php文件

```
return [
    'mysql-queue-server'  => [// 队列服务,除了监听端口,其他不能更改,分布式时,只能有一个服务器运行该进程
        'handler'     => \FlyCms\MysqlQueue\QueueServer::class,
        'count'       => 1,// 必须进程1
        'listen' => 'text://0.0.0.0:8774',
    ],

    'mysql-queue-consumer-1'  => [//消费者1
        'handler'     => \FlyCms\MysqlQueue\ConsumerServer::class,
        'count'       => 1,
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => app_path() . '/queue/consumer1'
        ]
    ],
    'mysql-queue-consumer-2'  => [//消费者2
        'handler'     => \FlyCms\MysqlQueue\ConsumerServer::class,
        'count'       => 1,
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => app_path() . '/queue/consumer2'
        ]
    ]
];

```

创建数据表
-----

[](#创建数据表)

创建队列数据表.

```
 CREATE TABLE IF NOT EXISTS `cms_queue`  (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `queue` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '队列名称',
  `uuid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL  COMMENT 'uuid',
  `create_queue_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建队列时间',
  `dely` int(11) NOT NULL DEFAULT '0' COMMENT '延时多久',
  `data` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL  COMMENT '传递的数据',
  `start_run_time` int(11) NOT NULL DEFAULT 0 COMMENT '预计开始执行时间',
   `run_num` int(11) NOT NULL DEFAULT 0 COMMENT '已执行次数',
   `status` int(11) NOT NULL DEFAULT 0 COMMENT '	状态,0未执行,1已完成,2已放弃,这里可以是后台直接操作放弃,也可以是太久没消费放弃的	',
  `create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `queue`(`queue`) USING BTREE,
  INDEX `uuid`(`uuid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息队列表' ROW_FORMAT = DYNAMIC
```

创建日志数据表

```
CREATE TABLE IF NOT EXISTS `cms_queue_log`  (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `queue_uuid` varchar(32) COMMENT '队列uuid',
  `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '状态,0成功,1失败',
  `result` text  COMMENT '日志',
  `running_time` varchar(10) NOT NULL COMMENT '执行耗时',
  `create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `create_time`(`create_time`) USING BTREE,
  INDEX `queue_uuid`(`queue_uuid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息队列日志表' ROW_FORMAT = DYNAMIC
```

使用
--

[](#使用)

创建队列 send()

- @param $queue string 队列名称
- @param $data mixed 发送的数据
- @param $dely int 延迟时间
- @return bool

```
   \FlyCms\MysqlQueue\Client::send('queue',[],0)
```

移除队列 removeQueue()

- @param $uuid string 消息队列uuid
- @return bool

```
  \FlyCms\MysqlQueue\Client::removeQueue($uuid);
```

立即执行队列 runQueue()

- @param $uuid string 消息队列uuid
- @return bool

```
  \FlyCms\MysqlQueue\Client::runQueue($uuid);
```

可视化
---

[](#可视化)

这个我就不写了,你自己直接调用查询数据库就行

常见错误
----

[](#常见错误)

端口放行,端口放行,端口放行

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

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

Every ~1 days

Total

3

Last Release

1078d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a2a2840ccbd7094dc1b92ee89c9cf2fb54a13e20ab6b324fc38dac8246947976?d=identicon)[settime](/maintainers/settime)

---

Top Contributors

[![settime](https://avatars.githubusercontent.com/u/28994637?v=4)](https://github.com/settime "settime (11 commits)")

### Embed Badge

![Health badge](/badges/fly-cms-mysql-queue/health.svg)

```
[![Health](https://phpackages.com/badges/fly-cms-mysql-queue/health.svg)](https://phpackages.com/packages/fly-cms-mysql-queue)
```

###  Alternatives

[league/geotools

Geo-related tools PHP 7.3+ library

1.4k5.3M26](/packages/league-geotools)[enqueue/enqueue

Message Queue Library

19820.0M56](/packages/enqueue-enqueue)[deliciousbrains/wp-background-processing

WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks.

1.1k409.8k6](/packages/deliciousbrains-wp-background-processing)[react/async

Async utilities and fibers for ReactPHP

2228.8M171](/packages/react-async)[react/promise-stream

The missing link between Promise-land and Stream-land for ReactPHP

11512.9M45](/packages/react-promise-stream)[illuminate/bus

The Illuminate Bus package.

6043.8M409](/packages/illuminate-bus)

PHPackages © 2026

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