Node.js 和 ActiveMQ 之间的集成 - 如何使用

Posted

技术标签:

【中文标题】Node.js 和 ActiveMQ 之间的集成 - 如何使用【英文标题】:Integration between Node.js and ActiveMQ - how to use 【发布时间】:2017-10-07 17:55:45 【问题描述】:

背景

我正在为一个需要消息代理的项目研究 ApacheMQ。在阅读official page 后,我看到了一些我感兴趣的功能:

访问消息Enterprise Integration Patterns (EIP) 支持STOMP、AMQP、MQTT 和OpenWire 协议

但是,根据文档,我不清楚我的某些目标是否可行。

问题

我了解为了使用 ActiveMQ 作为代理,我首先需要一个消息传递协议。根据language support for Node.js 上的文档,ActiveMQ 仅支持 Node.js 的 STOMP 协议。

    鉴于 STOMP 是一种协议,如果我找到适用于任何其他协议的 NPM 库,我可以将 Node.js 与该给定协议一起使用吗? 如果存在这样的库,您能指出一些吗? 将 Node.js 和 ActiveMQ 与 STOMP 以外的其他协议一起使用时是否有任何注意事项?

关于 EIP,我还需要澄清一下。经过仔细检查,我意识到EIPs can only be used via Apache Camel 是一个单独的项目,不支持除 Java 之外的任何东西。

    是否可以将 ActiveMQ 提供的任何 EIP 与 Node.js 一起使用?如果有,怎么做?

【问题讨论】:

【参考方案1】:

免责声明

我已经有一段时间没有发布这个了,为了将来的参考,我在这里发布我的发现。这些发现与我的经验有关,截至本文发布之日,它们尽可能准确。

答案

Q1:鉴于 STOMP 是一种协议,如果我找到任何其他协议的 NPM 库,我可以将 Node.js 与该给定协议一起使用吗?

A1:答案是肯定的。例如,使用 Node.js 的 MQTT 库,我可以与 ActiveMQ 代理进行通信。通常有一些必须考虑的怪癖,但它绝对有效。


Q2:如果存在这样的库,您能指出一些吗?

A2

MQTT:mqtt AMQP 1.0:amp10 和 rhea。它们不能开箱即用 - 请参阅Unable to connect to Apache ActiveMQ with Node.js STOMP:推荐的 STMOPIT 库。

就我个人而言,我至少希望看到将 MQTT 库添加到官方文档中,因为我相信这将有助于解决用户的许多问题。


Q3:将 Node.js 和 ActiveMQ 与 STOMP 以外的其他协议一起使用时有什么注意事项吗?

A3:是的。 ActiveMQ 有奇怪的身份验证要求,这会导致使用协议支持版本的客户端在连接时失败(一个例子是以前的 AMQP 1.0 npm 库)。此外,每个图书馆都有其怪癖,您需要检查一下。通常库的 github 页面或问题页面会让您了解与 ActiveMQ 的集成问题,但如果创建者声明对 ActiveMQ 的明确支持(并非总是如此),它会有所帮助。


Q4:是否可以在 Node.js 中使用 ActiveMQ 提供的任何 EIP?如果是这样,怎么做?

A4:我相信这仍然可以通过带有 XML 的 REST DSL 实现(即使我们不使用 Spring 或类似的东西)但我找不到任何东西,也找不到任何人实际使用它。社区未能就此事提供任何反馈,因为它似乎非常依赖 Java 技术,没有其他领域的知识。

结论

总的来说,如果您有一个 Java 项目,那么使用 ActiveMQ 就可以了。如果您想使用其他任何东西,我强烈建议您避免使用它

一切要么需要 Java,要么需要与它进行某种程度的集成。

您可能会争辩说 ActiveMQ 支持多种协议,但实际上支持您自己的语言的其他工具也是如此。

即使最后,Camel 提供的 EIP 也不能真正用于 Java 以外的任何东西,甚至社区也建议您自己实现这些模式,这违背了使用 ActiveMQ 的全部目的。

来源

社区线程:http://activemq.2283324.n4.nabble.com/Integration-between-Node-js-and-ActiveMQ-how-to-use-td4725822.html

特别感谢rhea 的作者“Gordon Sim-2”。很酷的项目,去看看吧!

【讨论】:

感谢您发布罚款,我正在做类似的研究。让我退缩的一件事是身份验证,文档指的是扩展一个 java 类来拦截和构建我自己的身份验证,但我只在 java 上看到它。可能我漏掉了一些东西,是不是意味着只有 java 可以拦截,而没有其他语言,如 python 或 javascript【参考方案2】:

正如 Flame_Phoenix 所说,您可以轻松地使用 HTTP 协议来发布和接收消息

欲了解更多信息:https://activemq.apache.org/rest

【讨论】:

以上是关于Node.js 和 ActiveMQ 之间的集成 - 如何使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node JS 中为 ActiveMQ 编写发送方应用程序

JBoss 和 ActiveMQ 之间挂起的 Socket.read() 线程

postman+newman+node.js+git+jenkins实现接口自动化持续集成

分布式消息通信ActiveMQ

如何集成 CouchApp、Node.JS、Sammy 和 Mustache

每日一学|初识ActiveMQ消息中间件:企业信息化