michel/pqueue
Composer 安装命令:
composer require michel/pqueue
包简介
PQueue is a minimalist PHP library for processing background messages using a single persistent CLI (managed via systemd) or periodic execution (via cron), covering 90% of use cases without external dependencies or complex worker management.
README 文档
README
PQueue is a lightweight, framework-agnostic library for handling background jobs and messages with persistent queues.
Features
- Multiple Transports: Comes with
SQLiteandFilesystemtransports. - DI-Friendly: Designed to integrate cleanly with any PSR-11 dependency injection container.
- Configurable Worker: The queue worker can be configured with memory limits, time limits, retry strategies, and more.
- Automatic Handler Discovery: Scans specified directories to find your message handlers automatically.
Installation
composer require michel/pqueue
Basic Usage (Without a Framework)
This example shows how to use the library in a simple PHP script.
1. Create a Message and a Handler
// src/Messages/MyMessage.php namespace App\Messages; class MyMessage { public string $text; public function __construct(string $text) { $this->text = $text; } } // src/Handlers/MyMessageHandler.php namespace App\Handlers; use App\Messages\MyMessage; class MyMessageHandler { public function __invoke(MyMessage $message) { echo "Processing message: " . $message->text . "\n"; } }
2. Dispatch a Message
// send_message.php require 'vendor/autoload.php'; use Michel\PQueue\Transport\SQLiteTransport; use Michel\PQueue\PQueueDispatcher; use App\Messages\MyMessage; // 1. Create a transport $transport = SQLiteTransport::create(['db_path' => __DIR__ . '/pqueue.sqlite']); // 2. Create a dispatcher $dispatcher = new PQueueDispatcher($transport); // 3. Dispatch your message $dispatcher->dispatch(new MyMessage('Hello, World!')); echo "Message dispatched!\n";
3. Run the Worker
The worker needs a HandlerResolver to get handler instances. For this simple example, we'll create a basic one.
// worker.php require 'vendor/autoload.php'; use Michel\PQueue\PQueueConsumerFactory; use Michel\PQueue\PQueueWorker; use Michel\PQueue\HandlerResolver\HandlerResolverInterface; use Michel\PQueue\Transport\SQLiteTransport; use App\Handlers\MyMessageHandler; // Import the handler class // 1. Create a simple handler resolver for the example $handlerResolver = new class implements HandlerResolverInterface { private array $handlers = []; public function getHandler(string $className): object { if (!isset($this->handlers[$className])) { $this->handlers[$className] = new $className(); } return $this->handlers[$className]; } public function hasHandler(string $className): bool { return class_exists($className); } }; // 2. Create the transport $transport = SQLiteTransport::create(['db_path' => __DIR__ . '/pqueue.sqlite']); // 3. Use the factory to build the consumer $factory = new PQueueConsumerFactory( $handlerResolver, [ MyMessageHandler::class, // You can add handler classes directly __DIR__ . '/src/Handlers' // And also scan directories ], __DIR__ . '/cache' // Cache directory for handler discovery ); $consumer = $factory->createConsumer(); // 4. Create and run the worker $worker = new PQueueWorker($transport, $consumer, [ 'stopWhenEmpty' => true, // Stop after processing all messages ]); $worker->run(); echo "Worker finished.\n";
Worker Callbacks
You can hook into the worker lifecycle using the following methods:
onConsume(callable $callback): Executed after a message is successfully consumed.onFailure(callable $callback): Executed when a message fails processing.onStop(callable $callback): Executed when the worker stops (due to memory limit, time limit, or empty queue).
$worker->onConsume(function ($message) { echo "Message processed!\n"; }); $worker->onFailure(function ($message, $exception) { echo "Message failed: " . $exception->getMessage() . "\n"; }); $worker->onStop(function () { echo "Worker stopped.\n"; });
michel/pqueue 适用场景与选型建议
michel/pqueue 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 12 月 15 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 michel/pqueue 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 michel/pqueue 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 25
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MPL-2.0
- 更新时间: 2025-12-15