workerman/rabbitmq
Composer 安装命令:
composer require workerman/rabbitmq
包简介
Asynchronous rabbitmq client for PHP based on workerman.
关键字:
README 文档
README
Asynchronous rabbitmq client for PHP based on workerman.
Install
composer require workerman/rabbitmq
Examples
Consumer
- receive.php
<?php declare(strict_types=1); use Bunny\Channel; use Bunny\Message; use Workerman\Worker; use Workerman\RabbitMQ\Client; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker(); $worker->eventLoop = \Workerman\Events\Fiber::class; $worker->onWorkerStart = function() { // Create RabbitMQ Client $client = Client::factory([ 'host' => '127.0.0.1', 'port' => 5672, 'user' => 'guest', 'password' => 'guest', 'vhost' => '/', 'heartbeat' => 60, 'heartbeat_callback' => function () { echo " [-] coroutine-consumer-heartbeat\n"; }, 'interval' => [100, 300] ])->connect(); $channel = $client->channel(); $channel->queueDeclare('hello-coroutine'); // Consumer $channel->consume(function (Message $message, Channel $channel, \Bunny\AbstractClient $client) { echo " [>] Received ", $message->content, "\n"; }, 'hello-coroutine', '', false, true ); $client->run(); echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; // Producer \Workerman\Timer::add($interval = 5 , function () use ($channel) { $channel->publish($message = 'Hello World By Self Timer. ' . time(), [], '', 'hello-coroutine'); echo " [<] Sent $message\n"; }); echo " [!] Producer timer created, interval: $interval s.\n"; }; Worker::runAll();
- Run command
php receive.php start.
Publish use on Workerman ENV
- send.php
<?php declare(strict_types=1); use Workerman\RabbitMQ\Client; use Workerman\Worker; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker(); $worker->eventLoop = \Workerman\Events\Fiber::class; $worker->onWorkerStart = function() { $client = Client::factory([ 'host' => 'host.docker.internal', 'port' => 5672, 'user' => 'guest', 'password' => 'guest', 'vhost' => '/', 'heartbeat' => 60, 'heartbeat_callback' => function () { echo "coroutine-producer-heartbeat\n"; } ])->connect(); $channel = $client->channel(); $channel->queueDeclare('hello-coroutine'); // 每5秒发一个消息 \Workerman\Timer::add(5, function () use ($channel) { $channel->publish($message = 'Hello World By Workerman Env Producer. ' . time(), [], '', 'hello-coroutine'); echo " [x] Sent '$message'\n"; }); }; Worker::runAll();
- Run command
php send.php start.
Publish script or use on PHP-FPM
- script.php
<?php declare(strict_types=1); use Workerman\RabbitMQ\Client; require_once __DIR__ . '/vendor/autoload.php'; $client = Client::factory([ 'host' => 'host.docker.internal', 'port' => 5672, 'user' => 'guest', 'password' => 'guest', 'vhost' => '/', 'heartbeat' => 60, 'heartbeat_callback' => function () { echo "coroutine-producer-heartbeat\n"; } ])->connect(); $channel = $client->channel(); $channel->queueDeclare('hello-coroutine'); $res = $channel->publish($message = 'Hello World By Normal Producer. ' . time(), [], '', 'hello-coroutine'); echo " [x] Sent '$message', success: $res\n";
- Run command
php script.php.
Async Consumer
- receive.php
<?php use Bunny\Channel; use Bunny\Message; use Workerman\Worker; use Workerman\RabbitMQ\Client; require __DIR__ . '/vendor/autoload.php'; $worker = new Worker(); $worker->onWorkerStart = function() { (new Client())->connect()->then(function (Client $client) { return $client->channel(); })->then(function (Channel $channel) { return $channel->queueDeclare('hello', false, false, false, false)->then(function () use ($channel) { return $channel; }); })->then(function (Channel $channel) { echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; $channel->consume( function (Message $message, Channel $channel, Client $client) { echo " [x] Received ", $message->content, "\n"; }, 'hello', '', false, true ); }); }; Worker::runAll();
- Run command
php receive.php start.
Async Producer
- send.php
<?php use Bunny\Channel; use Bunny\Message; use Workerman\Worker; use Workerman\RabbitMQ\Client; require __DIR__ . '/vendor/autoload.php'; $worker = new Worker(); $worker->onWorkerStart = function() { (new Client())->connect()->then(function (Client $client) { return $client->channel(); })->then(function (Channel $channel) { return $channel->queueDeclare('hello', false, false, false, false)->then(function () use ($channel) { return $channel; }); })->then(function (Channel $channel) { echo " [x] Sending 'Hello World!'\n"; return $channel->publish('Hello World!', [], '', 'hello')->then(function () use ($channel) { return $channel; }); })->then(function (Channel $channel) { echo " [x] Sent 'Hello World!'\n"; $client = $channel->getClient(); return $channel->close()->then(function () use ($client) { return $client; }); })->then(function (Client $client) { $client->disconnect(); }); }; Worker::runAll();
- Run command
php send.php start.
workerman/rabbitmq 适用场景与选型建议
workerman/rabbitmq 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 14.25k 次下载、GitHub Stars 达 43, 最近一次更新时间为 2020 年 10 月 10 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「AMQP」 「rabbitmq client」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 workerman/rabbitmq 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 workerman/rabbitmq 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 workerman/rabbitmq 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Queue
Work with RabbitMQ in Laravel.
Microservice RPC through message queues.
PHP AMQP Binding Library
The Listener component of the RabbitEvents library.
The Publisher component of the RabbitEvents package.
统计信息
- 总下载量: 14.25k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 43
- 点击次数: 11
- 依赖项目数: 5
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-10-10