etopian / rabbitmq-management-client
RabbitMQ 管理插件 API 客户端
Requires
- ext-json: *
- doctrine/common: >=2.6.3
- guzzlehttp/guzzle: >=6.3.3
Requires (Dev)
- php-amqplib/php-amqplib: dev-master
- phpunit/phpunit: >=7.0
- react/http-client: ^0.5.9
- react/partial: ~2.0
- seregazhuk/react-promise-testing: dev-master
Suggests
- react/react: Version 0.2 to use the async client
This package is auto-updated.
Last update: 2024-09-09 19:34:19 UTC
README
更新: 此分支是更新此库以允许其与现代(约2019年)的PHP版本(>=7.2)、RabbitMQ、Guzzle、React、Doctrine、PHPUnit 和相关支持库一起工作。 (请参阅 composer.json 以获取版本详细信息) 现有版本过多地依赖于已弃用的其他库版本,导致其无法在新项目中使用。这次更新修复了这个问题。
底层需要进行大量更改,但API应该几乎保持不变,除了从非异步客户端代码抛出的异常。
涉及不存在实体的案例(现在包括添加方法,例如尝试将绑定添加到不存在的虚拟主机)现在统一抛出 RabbitMQ\Management\Exception\EntityNotFoundException,而之前的一些是 RabbitMQ\Management\Exception\RuntimeException。由于Guzzle的变化,来自底层Guzzle库的其他异常现在作为 GuzzleHttp\Exception\ClientException 传递,而不是 GuzzleHttp\Exception\RequestException。
请注意,查询返回的属性及其格式取决于 rabbitmq 服务器版本。此包的实体类中定义的属性已更新,包括 RabbitMQ 3.8 提供的属性(一些较旧的属性保留,但不一定填充)。这些主要是为在IDE中提供参考和代码提示,但您的结果可能与实际服务器不同。定义的实体类与服务器返回的属性之间的差异将静默忽略,并且所有结果都将传递。
请注意,由于管理API缓存和统计信息收集间隔,查询返回的结果可能不完整或延迟。创建一个对象然后立即查询它可能产生不完整或缺失的结果。因此,单元测试内置了延迟,以便在检查各种测试中返回的结果之前等待。
(更新消息结束)
此库旨在帮助管理 RabbitMQ 服务器。它提供了两种查询 RabbitMQ 的方法:使用 Guzzle 的同步查询和使用 React 的异步查询。
异步查询
use RabbitMQ\Management\AsyncAPIClient; use React\EventLoop\Factory; $loop = Factory::create(); $client = AsyncAPIClient::factory($loop, array( 'url' => '127.0.0.1', )); $loop->addPeriodicTimer(1, function () use ($client) { $client->listQueues() ->then(function($queues) { echo "\n------------\n"; foreach ($queues as $queue) { echo sprintf("Found queue %s with %d messages\n", $queue->name, $queue->messages); } }, function ($error) { echo "An error occured : $error\n"; }); }); $loop->run();
异步客户端目前不支持保证API。
同步查询
确保队列有一个标志
use RabbitMQ\Management\APIClient; use RabbitMQ\Management\Entity\Queue; use RabbitMQ\Management\Exception\EntityNotFoundException; $client = APIClient::factory(array('url'=>'localhost')); try { $queue = $client->getQueue('/', 'queue.leuleu'); if (true !== $queue->durable) { $queue->durable = true; $client->deleteQueue('/', 'queue.leuleu'); $client->addQueue($queue); } } catch (EntityNotFoundException $e) { $queue = new Queue(); $queue->vhost = '/'; $queue->name = 'queue.leuleu'; $queue->durable = true; $client->addQueue($queue); }
您还可以使用保证管理器
use RabbitMQ\Management\APIClient; use RabbitMQ\Management\Entity\Queue; use RabbitMQ\Management\Guarantee; $client = APIClient::factory(array('url'=>'localhost')); $manager = new Guarantee($client); $queue = new Queue(); $queue->vhost = '/'; $queue->name = 'queue.leuleu'; $queue->durable = true; $queue->auto_delete = false; $queue = $manager->ensureQueue($queue);
API浏览器
在此处浏览API。
文档
在Read The Docs上阅读文档!
许可证
此库在 MIT 许可证下发布(使用它吧!)