etopian/rabbitmq-management-client

RabbitMQ Management Plugin API Client

0.3.1 2019-10-02 23:02 UTC

This package is auto-updated.

Last update: 2024-04-09 18:44:35 UTC


README

Build Status

Update: This branch is an update to this library to allow it to work with modern (circa 2019) versions of PHP (>=7.2), RabbitMQ, Guzzle, React, Doctrine, PHPUnit and related support libraries. (see composer.json for version details) The existing version had too many dependencies on deprecated versions of other libraries preventing it from being utilized on new projects. This update fixes that.

Extensive changes were needed under the hood but the API should remain nearly identical with the exception of the exceptions thrown from the non-async client code.

Cases involving a non-existent entity (now including Add methods, such as trying to add a binding to a non-existant vhost) are now uniformly thrown as RabbitMQ\Management\Exception\EntityNotFoundException where previously some were RabbitMQ\Management\Exception\RuntimeException. Other exceptions from the underlying Guzzle library are now passed through as GuzzleHttp\Exception\ClientException rather than GuzzleHttp\Exception\RequestException due to changes in Guzzle.

Note that the properties and format thereof returned in queries are dependent on the rabbitmq server version. The properties defined in the Entity classes of this package have been updated to include those provided by RabbitMQ 3.8 (with some older ones retained but not necessarily populated.) These are primarily provided for reference and code hinting in IDEs but your results may vary with an actual server. Differences between the defined entity classes and the properties returned by the server are silently ignored and all results returned are passed through.

Note also that due to management api caching and statistics collection intervals, the results returned from queries may be incomplete or delayed. Creating an object and then immediately querying it may yield incomplete or missing results. Because of this, the unit tests have built in delays to wait before checking the returned results in various tests.

(end update message)

This library is intended to help management of RabbitMQ server in an application. It provides two ways to query RabbitMQ : Synchronous query with Guzzle and Asynchronous query with React.

Asynchronous Queries

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();

Asynchronous Client do not currently support Guarantee API.

Synchronous Queries

Ensure a queue has a flag :

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);
}

You can also use the Guarantee manager :

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 Browser

Browse the API here.

Documentation

Read the documentation at Read The Docs !

License

This library is released under the MIT license (use it baby !)