Messaging / PHP

一套 API 接入二十种消息系统

纯 PHP 实现 publish / receive / ack,覆盖 20 种消息系统与 13 套协议栈。

messaging-php 项目宠物 · 机器人信使小递,messaging 的项目宠物

一套 API 收纳二十种消息系统

messaging-php 用纯 PHP 实现消息发布与消费,TCP 走 stream_socket_client,云服务走 Guzzle,不依赖 broker SDK 或扩展。

20 个产品名收敛为 13 套协议栈,切换 broker 通常只需修改 driver 与连接配置,业务代码保持不变。

  • 统一 Manager 门面
  • 20 个驱动名已实现
  • 六框架可选适配
20覆盖系统
20已实现驱动
v1.8.1当前版本
messaging-php 项目宠物 · 机器人信使小递 的 微笑 表情

小递

一台圆滚滚的浅蓝白色机器人信使,深色屏幕上亮着青色像素眼睛,头顶蓝色纸飞机天线,围着 PHP 紫围巾,胸口有信封投递口和三盏蓝、青、紫状态灯,正抬起右手打招呼。

信号满格,消息必达。

从发布到确认的能力

统一契约、能力声明与纯 PHP 传输,一套代码适配多种 broker。

统一 API

publish、receive、consume、ack 与 reject 共用一套调用方式。

纯 PHP 传输

TCP 走 stream_socket_client,协议编解码全部用 PHP 实现。

能力模型

capabilities() 运行时查询,不支持的能力抛异常,不静默降级。

框架适配

Laravel、ThinkPHP、webman、Hyperf、Yii2 与 Yii3;Composer 安装时自动复制各框架配置。

连接管理

default 加 connections 配置,连接按名缓存,并提供 disconnect() 重连。

四层测试

742 项单元/协议测试,加假 broker、契约与重型 Docker 集成矩阵。

功能是这样长出来的

最近四次驱动里程碑,从 P2 到 P5。

v1.8.0

审计修复与真实 broker

RocketMQ 心跳/位点、Manager 重连、Pulsar 兼容与 CI 加固。

v1.7.0

框架配置自动复制

Composer Plugin 按框架规则复制配置,Yii3 自动合并。

v1.6.0

20 个驱动名全部实现

Pulsar 与 RocketMQ 上线,覆盖全部 20 个系统。

v1.5.0

Kafka 家族驱动

Kafka、Redpanda、AutoMQ、Confluent、Event Hubs 共用协议栈。

版本日志

最近的发布记录,完整列表在 GitHub Releases。

最新 v1.8.1 全部版本
v1.8.12026-10-30

文档、架构图与宠物动画更新。

v1.8.02026-10-30

审计修复、真实 Pulsar 兼容与 CI 加固。

v1.7.02026-10-30

框架配置自动复制:Composer Plugin。

v1.6.12026-10-30

最终加固:20 驱动一致性测试与 P1-P5 架构图。

v1.6.02026-10-30

P5:新增 Pulsar 与 RocketMQ,20 个驱动名全部实现。

v1.5.02026-10-30

P4:新增 Kafka 系 5 个驱动,已实现 18 个驱动名。

v1.4.02026-10-30

P3:新增 RabbitMQ 与 ZeroMQ 驱动,已实现 13 个驱动名。

v1.3.02026-10-30

新增 AWS、GCP 与 Azure 云服务驱动,已实现驱动达到 11 个。

v1.2.02026-10-29

新增 PHP 框架集成与驱动文档,补齐安装与使用说明。

v1.1.02026-10-29

实现 P1 驱动:beanstalkd、redis、nsq、stomp 与 nats。

v1.0.12026-10-29

修复空测试目录在 CI 中丢失的问题。

v1.0.02026-10-29

首个版本:核心 API 与驱动契约。

安装与使用

先安装,再用 Redis Streams 跑通发布、消费与确认。

PHP >= 8.0 / Composer完整 README
安装
composer config allow-plugins.erikwang2013/messaging-php true
composer require erikwang2013/messaging-php
最小示例
use Erikwang2013\Messaging\Contract\Message;
use Erikwang2013\Messaging\Contract\ReceiveOptions;
use Erikwang2013\Messaging\Manager;

$mq = new Manager([
    'default' => 'redis',
    'connections' => [
        'redis' => [
            'driver' => 'redis',
            'host' => '127.0.0.1',
            'port' => 6379,
            'group' => 'orders',
        ],
    ],
]);

$connection = $mq->connection();
$connection->publish('orders', Message::json(['id' => 1]));

while ($message = $connection->receive('orders', new ReceiveOptions(timeoutMs: 5000))) {
    $message->ack();
}

小递的十二种动态表情

每个表情都有细微动画,鼠标停一停。

搜索本站

输入关键词,例如“上传”“迁移”“JWT”。