AMQP和amqplib - 哪个是更好的Node.js AMQP客户端库?

43

这些AMQP客户端库有哪些区别? 哪一个是最受推荐的? 主要区别是什么?


1
“哪一个是最推荐的”是一个很宽泛的问题。不过其他两个也不错。 - Niels Abildgaard
7个回答

53

我建议使用amqp.nodebramqp而不是node-amqp。node-amqp存在许多漏洞且维护不力,还隐藏了"channel"概念,这会给rabbitmq服务器带来很多问题(因为它们永远不会关闭)。


我一直在使用bramqp和amqplib,目前为止,bramqp是一个完整的库解决方案。我喜欢通过“handle”对象直接使用amqp命令,所以这对你来说是个好消息;)谢谢! - Javier del Saz
4
感谢您指出node-amqp隐藏了“频道”概念,我已经花了两天时间探索这个问题,给你点赞。 - Ajay
我可以证实,node-amqp是一个相对较差的模块。目前我正在使用amqplib,并且一直很满意。 - afreeland
我应该在什么时候使用rabbit.js?Rabbit.js和amqp.node是一样的吗?对的。 - maddy
Wascally现在已经死了。我不会推荐一个获胜的库,但请自行研究! - Askdesigners
显示剩余2条评论

49

我是编写bramqp库的人。因此,我从一开始就承认我可能有点偏见。:P

在我看来,只要你知道规范,bramqp应该可以正常工作。否则,请使用amqp.node


以下是可用于node.js的AMQP库。

amqplib / amqp.node - 支持promise方式,仍在更新,看起来相当稳定且易用

bramqp - 提供完整的低级别访问AMQP功能,不建议初学者使用

amqp-coffee - 类似于amqp/node-amqp的coffeescript实现

amqp / node-amqp - 流行的,固定API,更新频率较低,存在一些奇怪的错误,稳定但受限制


以下库使用上述其中一个库,同时提供更易用的接口或添加功能

rabbit.js 使用amqplib / amqp.node

wascally 使用amqplib / amqp.node

amq 使用amqplib / amqp.node

amqpea 使用bramqp

easy-amqp 使用 amqp/node-amqp。

rabbus 使用 wascally。


我还将单独添加node-amqp10,因为它可以连接到 amqp 1.0 服务器。

如果还有其他需要添加的,请告诉我。


1
完全同意,bramqp看起来更加健壮和直接,但需要更多的努力才能开始使用和理解它。在其他库中,每个库都有自己的方法和技巧来实现相同的功能,或者仅仅缺少某些AMQP的功能。这就是我选择这次使用bramqp的原因。 - Javier del Saz
1
这是一个好的库创建者提供的有用比较。有多个关于使用node-amqp库在Node和RabbitMQ上的讨论。我曾经安装过它,但随后发现使用单个TCP连接的通道可以更好地管理资源。但在node-amqp中找不到其处理方法。正如上面卡尔所指出的那样,您现在计划使用amqp.node,因为我是新手,但一定会在RabbitMQ得到更好的控制时探索bramqp。 - Ajay

5

这个问题在2020年可能需要更新的答案。

关于不同库的作用,您仍然可以参考bakkerthehacker的回答。

在2020年:

  1. amqp似乎不再受支持。它最后一次发布是2年前。
  2. 对于AMQP 0-9-1协议,amqplib是最广泛使用的库。
  3. 对于AMQP 1.0协议,您可以选择rhea

2
我一直在使用node-amqp
npm install amqp

这是RabbitMQ推荐的一个模块,所以我一直在使用它。从我所做的事情来看,与我见过的其他库相比,这个模块更加简洁易读。

你能在node-amqp中创建通道吗? - Ajay
2
请注意,您的链接是在2010年发布的。 - Catfish

2

我曾经使用过这两个库。乍一看,node-amqp(amqp)似乎更加适合,但实际上它有很多漏洞却没有人修复。例如:

  1. RabbitMQ的MQTT和STOMP适配器应该允许使用这两种协议的客户端与使用AMQP的客户端进行通信,但是node-amqp无法解析由MQTT或STOMP发送的消息,而amqp.node(amqplib)可以。
  2. node-amqp(amqp)已经实现了自动重连,因此在意外断开连接时不会抛出异常。这意味着你将被迫使用内置的重新连接功能,无法检测到断开并自己处理。但是,它的重新连接总是使连接数翻倍。这最终会耗尽客户端和服务器。我宁愿使用amqp.node(amqplib)编写自己的重新连接函数。

我使用www.robomq.io提供的代理进行了测试,它是一个很好的代理,所以这个问题应该是库的问题。在Node.js中实现一个完美的库确实很难。

顺便说一下,你可以在https://github.com/robomq/robomq.io/tree/master/sdk/AMQP/Node.js中找到使用amqp.node(amqplib)的5种场景下的完整示例代码,文档在http://robomq.readthedocs.org/en/latest/one-one/#nodejs


1

0

刚开始自学rabbitmq。我从其他博客中了解到ampq.node很受欢迎。另一个我发现的(未经测试)是来自wascally。https://github.com/LeanKit-Labs/wascally


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