访问RabbitMQ(AMQP)的最佳PHP客户端库是什么?

38

在RabbitMQ网站上有一份PHP客户端列表。我发这个问题是想让使用过这些任何一个客户端的人在这里分享他们的经验。

  • 安装时是否遇到任何问题?
  • 稳定性如何?
  • 是否存在性能问题?
  • 文档/支持如何?

即使您只使用过其中一个库,请分享您的经验。

以下是其中一些客户端:

P.S. 我知道"最佳..."是"主观的",但这个问题的重点是收集经验,帮助人们对这些 AMQP 库做出明智的决定。请不要因为它含有"best"一词就过于紧张地关闭这个问题。

P.P.S. 我正在使用 RHEL 5 上的 PHP 5.3。


1
嗯,这确实是主观的,没有明确的答案。也许更适合程序员? - Gordon
2
也许吧,但我想看看讨论。这是我们的大项目目前面临的问题。 - aib
客户端列表现在位于http://www.rabbitmq.com/download.html,另有“其他语言的客户端”可在http://www.rabbitmq.com/devtools.html获取。 - PapaFreud
我想知道2022年是否有任何更新? - Qiulang
6个回答

31

供参考,PECL AMQP扩展http://php.net/manual/fa/book.amqp.php 是同一个东西,一个是包,另一个是该包的文档。

作为官方PHP AMQP扩展程序的维护者,我有点偏袒。许多人在高容量低延迟生产环境中使用此扩展,因为它比用原生PHP编写的扩展快得多。此外,由于我经常在我的工作中使用它,所以我必须使其正常工作并保持最新状态。

这个扩展的缺点是它尚不可用于Windows系统,因为它依赖的库目前正在移植。我们没有Windows支持的预计时间表,但一旦依赖关系支持Windows,我们的目标就是将扩展移植到Windows上。


感谢您的发布,@Pieter。您能否评论一下您的团队正在进行的开发水平和资源情况?您是否与librabbitmq团队或RabbitMQ本身密切合作或协调发布(随着AMQP成熟到1.0等)? - dkamins
1
我们如何帮助将其移植到Windows?有哪些依赖关系? - aib
@dkamins:我们有两个资源负责保持这个扩展程序没有漏洞并且与最新版本的RabbitMQ和底层C客户端兼容。后者是实验性的,因此有时候会很困难,但这是一个生产级别的要求,所以我们必须付出努力。 我们还没有到协调发布版本的阶段,但我希望在下一个主要版本中能够做到。 - Pieter
@aib:依赖项是我们使用的基础 C 库。就像 memcache 扩展一样,我们包装了一个标准的 C 库,由于 C 库在 Windows 上还不完全支持,因此我们陷入困境。整个 RabbitMQ 社区正在大力推动使其在 Windows 上运行,并且据我所知,我们已经非常接近成功了。 - Pieter
此外,可以查看以下帖子以编译rabbitmq-c并安装PECL ampq:http://www.thegeekstuff.com/2013/05/amqp-php-extension/comment-page-1/#comment-757997 - DaveO
显示剩余4条评论

6

2
到目前为止,我一直使用这个库并取得了良好的结果。只是发现了第一个缺点:当采用Monolog(https://github.com/Seldaek/monolog)时,我发现它依赖于PECL php-amqp模块,并且无法直接与php-amqplib配合工作,因为它不像之前的那个一样将AMQPExchange公开为对象。需要更改Monolog的AMQP处理程序或php-amqplib以正确匹配它们。 - Rodrigo Neves

3

根据初步的审查,以下是一些信息:

https://github.com/tnc/php-amqplib 是在过去的某个时间点fork了http://code.google.com/p/php-amqplib/,但没有清晰的历史记录或显示出哪些更改,导致努力的碎片化。此外,它似乎没有跟上应用于原始版本的错误修复,其中许多在过去几个月中已经出现。

此外,http://code.google.com/p/php-amqplib/ 本身现在似乎不再处于活跃开发状态,并且一个糟糕的补丁已经在一个多月前应用于主干,使其处于损坏状态。(我提交了一个修补程序来解决这个问题,但这是一个不好的迹象)。


是的。我更喜欢php-amqplib,因为它最像python-amqplib。我(没错,tom.bioinf就是我)写了应该被应用的补丁,并且不会破坏主干;但是这就是现实。 - Tom O'Connor
@Tom,你还在使用php-amqplib吗? - dkamins
不是个人原因。我在另一份工作时编写了那个补丁,他们仍在使用它,我想,但我怀疑他们自那以后是否升级过。为了测试的目的,我很乐意再次使用php-amqplib。 - Tom O'Connor

2

还有一个https://github.com/bkw/php-amqp/,我认为这是http://code.google.com/p/php-amqplib/的镜像。我在使用这个代码时遇到了一些问题:正常运行期间会出现通知消息,当出现某些问题时则会出现各种错误和警告。该代码还默认采用PHP手册中的方法;例如,套接字读取调用仅针对错误返回进行检查,而事实上,我刚刚发现套接字关闭/超时可能会由4种不同的条件指示。

我开始觉得编译的库解决方案(即PHP扩展)是最好的选择,特别是因为存在线程和套接字问题,而PHP处理这两个问题都不太好。


有趣。我被 PHP-only 客户端的简单性所吸引,但你提出了很好的观点。 - dkamins
顺便提一下,https://github.com/bkw/php-amqp/ 需要 bc_math 库 http://www.php.net/manual/en/ref.bc.php。 - Lester Chan

2

经过查看php-amqp和PECL版本,我的印象是基本的发布和消费消息的支持已经实现。然而,它们只能在*NIX平台上开箱即用。您将不得不费尽周折才能让它们在Windows上运行(这可能取决于您的开发或部署平台是否有问题)。

额外福利:https://github.com/tnc/php-amqplib 在MEAP书籍“RabbitMQ in Action”中使用。它是否会影响其采用情况仍有待观察。


1
根据tnc版本的文档,它已经迁移到此处:https://github.com/videlalvaro/php-amqplib。 - Mei

0

我们正在开发AMQP互操作性。它试图识别和标准化PHP程序通过AMQP创建、发送、接收和读取MQ消息的常见方式,以实现互操作性。

如果你对此抱有信心,你可以从任何兼容interop的传输开始。你仍然能够在未来更改它,你不会被锁定。

我们目前支持enqueue/amqp-extenqueue/amqp-lib。第一个是在php amqp扩展之上工作,而另一个则采用了phpamqplib。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接