activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gordon Sim <g...@redhat.com>
Subject Re: Integration between Node.js and ActiveMQ - how to use
Date Wed, 10 May 2017 20:01:30 GMT
On 10/05/17 08:36, pedro-masterasp wrote:
> Regarding my questions I found some of the answers:
>
> Q1: Given that STOMP is a protocol, if I find a NPM library for any of the
> other protocols, can I use Node.js with that given protocol?
>
> A1: The answer is yes. For example, using a MQTT library for Node.js, I can
> communicate with the ActiveMQ broker. There are usually some quirks that one
> has to considerate, but it definitely works.
>
> Q2: If such libraries exist, can you point some?
>
> A2: MQTT: https://www.npmjs.com/package/mqtt
>       AMQ 1.0 : https://www.npmjs.com/package/amqp10 (doesn't work out of

For AMQP 1.0 there is also https://www.npmjs.com/package/rhea 
(disclosure: I am the author)

> the box:
> http://stackoverflow.com/questions/43873400/unable-to-connect-to-apache-activemq-with-node-js)
>       STOMP: The recommended STMOPIT library.
>
> Personally I would like to at least see the MQTT library added to the
> official documentation, as I believe it would help clear many questions from
> users.
>
> Q3: Are there any caveats in using Node.js and ActiveMQ with another
> protocol other than STOMP?
>
> A3: Yes. ActiveMQ has weird authentication requirements which lead to
> clients using a protocol's supported version to fail on connect (an example
> is with the previous AMQP 1.0 npm library).

As of 5.14 it seems ActiveMQ requires a SASL layer, even if you use 
ANONYMOUS to authenticate. The examples for clients often don't 
explicitly authenticate in any way (as much an issue of the examples - 
including those for rhea(!) - as for the broker, since in many cases you 
would want to restrict access).

To have the amqp10 client use a SASL layer, just specify a saslMechanism 
override on the connect e.g.

    client.connect(uri, {'saslMechanism':'ANONYMOUS'})

(For rhea you would just specify a username with no password).

> Furthermore, each library has
> its quirks, that you need to check. Usually the library's github page or
> issues page will give you some light on the integration issues with
> ActiveMQ, but it helps if the creators state clear support for ActiveMQ
> (which is not always the case).

One other caveat is that not all protocols support all patterns or use 
cases. For example, MQTT is a protocol for pub-sub specifically and not 
for e.g. a shared task queue.

> Q4: Is it possible to use any of the EIPs that ActiveMQ offers with Node.js?
> If so, how?
>
> A4: WIP
>
> Regarding this last question ... I don't know of any frameworks to achieve
> this for nodejs.  I understand I can implement the patterns myself, but then
> if I do it, what's the point of using ActiveMQ when compared, lets say, to
> RabbitMQ which is lighter and supports more versions of AMQP?

RabbitMQ supports AMQP 0-9-1, 0-9 and 0.8 which were interim releases of 
the protocol before it reached full standardisation at 1.0. 0-9is 
essentially identical to 0-9-1 which merely removed some unimplemented 
stuff from 0-9 and clarified the text to be less ambiguous. 0.8 is also 
very similar but lacks a one or two methods. They also have some 
proprietary extensions to 0-9-1 to cover some of its missing features 
(e.g. acknowledged publication)

There is an also a plugin for 1.0. AMQP 1.0 is quite a different 
protocol with different client libraries. Choosing 0-9-1 is really 
choosing RabbitMQ, whereas as choosing 1.0, an ISO standard, is 
supported by other brokers/services. So I don't think supporting more 
versions of AMQP is much of a benefit.

> In my eyes, the real power of ActiveMQ lies in its integration with Camel,
> otherwise it is just yet another message broker with nothing special to add
> (correct me if I am wrong here ... ).

It is developed in the community under an open source license *and* open 
governance ('the Apache way'). It supports full JMS semantics (which 
RabbitMQ does not) including selectors, message groups, *atomic* 
transactions as well as a range of useful extensions such as virtual- 
and composite- destinations


Mime
View raw message