prolic/humus-amqp

PHP-AMQP 库,具有 RabbitMQ 扩展

资助包维护!
Patreon

v2.2.0 2023-09-25 08:11 UTC

README

PHP 7.4 AMQP 库

Build Status Coverage Status Gitter Documentation Status

文档 由 Read the Docs 提供。

概览

PHP 7.4+ AMQP 库,支持多种驱动程序,并提供功能齐全的消费者、生产者和 JSON-RPC 客户端/服务器实现。

JSON-RPC 部分实现了 JSON-RPC 2.0 规范

当前支持以下驱动程序: php-amqpPhpAmqpLib

php-amqp 至少需要 v1.9.3,PhpAmqpLib 至少需要 v3

此库附带 psr/container 工厂,可以帮助您设置一切。

Zend 框架和 Symfony 框架集成

安装

您可以通过添加 "prolic/humus-amqp": "^2.0" 作为 composer.json 中的要求来通过 composer 安装 prolic/humus-amqp。

使用方法

交换机

$exchangeName = 'test-exchange';
$exchange = ExchangeFactory::$exchangeName($container);

$exchange->publish('test-message');

队列

$queueName = 'test-queue';
$queue = QueueFactory::$queueName($container);

$message = $queue->get();
$queue->ack($message->getDeliveryTag());

生产者

$producerName = 'test-producer';
$producer = ProducerFactory::$producerName($container);

$producer->confirmSelect();
$producer->publish(['foo' => 'bar'], 'my-routing-key');
$producer->waitForConfirm();

JSON RPC 客户端

$clientName = 'my-client';
$client = JsonRpcClientFactory::$clientName($container);
$client->addRequest(new JsonRpcRequest('my-server', 'method', ['my' => 'params'], 'id-1'));
$client->addRequest(new JsonRpcRequest('my-server', 'method', ['my' => 'other_params'], 'id-2'));
$responseCollection = $client->getResponseCollection();

JSON RPC 服务器

$serverName = 'my-server';
$server = JsonRpcServerFactory::$serverName($container);
$server->consume();

注意

从 1.x 升级到 1.4

之前:如果启用了 auto_setup_fabric,则自动完成队列和交换机的绑定。交换机也会被创建。匿名队列需要将 auto_setup_fabric 设置为 true。

新:如果启用了 auto_setup_fabric 或队列是匿名的(没有名称),则队列将被创建并执行绑定,但不会创建交换机。如果您想启用创建依赖交换机(包括交换机绑定),请将新参数 auto_setup_exchanges 设置为 true。

这是一个轻微的 BC 断裂,但旧行为问题如此严重,以至于我不得不做出这个改变。

AMQP-扩展

  1. 我们建议使用 php-amqp >=v1.9.3 或从 master 编译它,如果您在使用 amqp 扩展时遇到任何问题,请首先检查它们的 issue tracker。

ext-amqp 驱动程序是最高效的。

PhpAmqpLib

  1. 当使用 php-amqplib 作为驱动程序时,值得注意的是,StreamConnection(同样适用于 SSLConnection)没有超时的可能性。如果您想使消费者在接收不到更多消息时超时,您应该使用 SocketConnection(假设您不需要 SSL 连接)。

  2. 当使用 php-amqplib 作为驱动程序并且您使用的是 LazyConnection 时,您不应该自己创建通道,而是调用 $channel = $connection->newChannel()

支持

贡献

请随意分支并扩展现有的插件或添加新的插件,并发送包含您更改的 pull request!为了建立一致的代码质量,请为您的所有更改提供单元测试,并可能更新文档。

许可

MIT 许可下发布。