func0der/humus-amqp

PHP-AMQP 库,支持 RabbitMQ 扩展

资助包维护!
Patreon

v2.1.1 2022-11-11 17:23 UTC

README

请注意,这只是一个 prolic/humus-amqp 的镜像。我只是创建了这个副本来发布库的新版本。我没有计划积极维护它。

PHP 7.4/8.x 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,php-amqplib 至少需要 v2.11.0

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

Zend 框架和 Symfony 框架集成

安装

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

用法

交换

$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-Extension

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

ext-amqp 驱动程序是性能最好的。

PhpAmqpLib

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

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

支持

贡献

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

许可

MIT 许可下发布。