activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martyn Taylor <mtay...@redhat.com>
Subject Re: Artemis as multiprotocol broker
Date Tue, 09 Aug 2016 14:30:42 GMT
Hi Luca,

The feature is supported.  The issue was how you were configuring your
client.

There are two versions of MQTT that are supported in Artemis: 3.1 and
3.1.1.  In 3.1.1 the protocol handshake (or ID), the first couple of bytes
sent by the client changed.  So, you must specify the corresponding version
and protocol ID in your client.

// For MQTT 3.1.1 this is
protocolId: "MQTT"
protocolVersion: 4

or

// For MQTT 3.1 - old version
protocolId: MQIsdp
protocolVersion: 3

The issue was that your client was specifying:

protocolId: MQTT
protocolVersion: 3

This does not match any protocol, hence the error you are seeing.

I modified your javascript to configure your client like below and it
worked for me.

      var client = mqtt.connect('ws://localhost:1883', {
          protocolId: 'MQTT'
        , protocolVersion: 4
      });

Can you update accordingly and let me know if it works.

Thanks
Martyn

On Tue, Aug 9, 2016 at 3:11 PM, Luca Capra <luca.capra@gmail.com> wrote:

> Hi Martyn, all
>
> sorry for taking on from such an old thread, but as of today with
> 1.4-SNAPSHOT I've not been able to have MQTT over websocket to work
>
> I continue to receive a debug notice like this
>
> - Requested subprotocol(s) not supported: MQTT
> - Requested subprotocol(s) not supported: mqttv3.1.1
> - Requested subprotocol(s) not supported: mqtt
> - ... many other tentatives
>
> Is it the subprotcol name that is not matching or is this feature actually
> not supported?
>
> I'm trying to have the broker to talk from a web browser to the broker and
> still mqtt over ws seems the best way.
> Do you have any suggestion ?
>
> Thank you!
>
>
>
> 2016-05-31 18:50 GMT+02:00 Martyn Taylor <mtaylor@redhat.com>:
>
> > Hi Luca,
> >
> > You are seeing the error because you are not setting the correct version
> > and protocol header in your client.  Your client should set:
> >
> > ProtocolID="MQTT" and ProtocolVersion=4   // 3.1.1
> > or
> > ProtocolID="MQlsdp" and ProtocolVersion=3 // 3,1
> >
> > Artemis will accept both protocol versions (which are practically
> > identical) but both point to the 3.1.1 implementation.  Your mileage may
> > vary with 3.1.  I suggest always using 3.1.1.
> >
> > line 15853 of your js should be:
> >
> >       var client = mqtt.connect('ws://localhost:1883', {
> >         protocolId: 'MQTT
> >         , protocolVersion: 4
> >       });
> >
> > Instead of:
> >
> >       var client = mqtt.connect('ws://localhost:1883', {
> >         protocolId: 'MQTT' // or 'MQIsdp' in MQTT 3.1.1
> >         , protocolVersion: 4 // or 3 in MQTT 3.1
> >       }); // you add a ws:// url here
> >
> > Note the protocol ID in 3.1.1 is "MQTT".
> >
> > I made these changes locally and it works fine for me.
> >
> > Thanks
> > Martyn
> >
> > On Tue, May 31, 2016 at 2:04 PM, Luca Capra <luca.capra@gmail.com>
> wrote:
> >
> > > Hi,
> > >
> > > I tried to setup the mqttjs library and run it in a browser.
> > > Unfortunately, it tries to connect over websocket and artemis cannot
> > > recognize the subprotocol
> > >
> > > The source is here: http://pastebin.com/Jgeijbz9
> > >
> > > [Thread-10 (activemq-netty-threads-2076099910)] [DEBUG]
> > > io.netty.handler.codec.http.websocketx.WebSocketServerHandshaker -
> [id:
> > > 0x8958b0d5, /127.0.0.1:60138 => /127.0.0.1:1883] WebSocket version V13
> > > server handshake
> > > [Thread-10 (activemq-netty-threads-2076099910)] [DEBUG]
> > > io.netty.handler.codec.http.websocketx.WebSocketServerHandshaker -
> > > WebSocket version 13 server handshake key: pJTCBulMMJvyCoIpj2wEPg==,
> > > response: 6vRlkIXEqz7ihckJ2TFuB6V9uhY=
> > > [Thread-10 (activemq-netty-threads-2076099910)] [DEBUG]
> > > io.netty.handler.codec.http.websocketx.WebSocketServerHandshaker -
> > > Requested subprotocol(s) not supported: mqttv3.1
> > >
> > >
> > > In the latest master the issue with the client disconnecting is still
> > > there, but the error message is slightly different. In 1.2 it used to
> > work
> > >
> > > [Thread-3 (activemq-netty-threads-2076099910)] [DEBUG]
> > > io.netty.util.internal.JavassistTypeParameterMatcherGenerator -
> > Generated:
> > >
> > > io.netty.util.internal.__matchers__.io.netty.handler.
> > codec.mqtt.MqttMessageMatcher
> > > [Thread-3 (activemq-netty-threads-2076099910)] [DEBUG]
> > > org.apache.activemq.artemis.core.protocol.mqtt - SESSION CREATED:
> > > d2cd94e9-3d23-4a85-bb53-53528cd9fcb1
> > > [Thread-3 (activemq-netty-threads-2076099910)] [DEBUG]
> > > org.apache.activemq.artemis.core.protocol.mqtt - Bad Message
> > Disconnecting
> > > Client
> > >
> > >
> > > Thank you
> > >
> > > Regards
> > > Luca
> > >
> > >
> > > 2016-05-27 13:25 GMT+02:00 Luca Capra <luca.capra@gmail.com>:
> > >
> > > > Hi Martyn,
> > > > I will bundle the js all in a page for testing.
> > > >
> > > > I think the js library will try to interact with "mqtt over
> websockets"
> > > > from the browser.
> > > > (See just one line above here,
> > > > https://github.com/mqttjs/MQTT.js#contributing)
> > > >
> > > > Is it supposed to work in Artemis? (.. Nice feature btw!)
> > > >
> > > > I can either provide you the client wrapped in docker or vagrant vm
> if
> > it
> > > > works for you.
> > > >
> > > > Thanks
> > > > Luca
> > > >
> > > >
> > > > 2016-05-27 11:56 GMT+02:00 Martyn Taylor <mtaylor@redhat.com>:
> > > >
> > > >> Hi Luca,
> > > >>
> > > >> I had a play around with the JS you supplied but didn't get it
> > working.
> > > >> Any chance you could browsify the test so I can run it without
> having
> > a
> > > >> NodeJS environment set up, (A bash script would do if that's
> > > possible).  I
> > > >> just need to see the issue in the broker.
> > > >>
> > > >> Thanks
> > > >>
> > > >> On Thu, May 26, 2016 at 10:18 AM, Luca Capra <luca.capra@gmail.com>
> > > >> wrote:
> > > >>
> > > >> > Ok, I will double check on the client side.
> > > >> >
> > > >> >
> > > >> > If you have the time, here the test case
> > > >> >
> > > >> > The nodejs client code
> > > >> > https://gist.github.com/muka/b6374610618978948f39d83e5248ff7e
> > > >> >
> > > >> > The broker implementation (raptor-broker) is here (branch artemis)
> > > >> >
> > > >> > https://github.com/muka/raptor/tree/artemis
> > > >> >
> > > >> > To run it should just require to mvn install and run the
> mainClass.
> > It
> > > >> > requires artemis modules of 1.3-SNAPSHOT in the local repository..
> > I'm
> > > >> > pretty sure you have them already :)
> > > >> >
> > > >> > It tries to load configurations (avail in repository ./config)
> from
> > > >> > /etc/raptor or from system property -DconfigDir=<path>
> > > >> >
> > > >> > Thank you for the precious help!
> > > >> >
> > > >> > Regards
> > > >> > Luca
> > > >> >
> > > >> >
> > > >> > 2016-05-26 10:42 GMT+02:00 Martyn Taylor <mtaylor@redhat.com>:
> > > >> >
> > > >> > > Hi Luca,
> > > >> > >
> > > >> > > Only 3.1.1 is supported in Artemis.  We've not tested against
> > older
> > > >> > > versions.  Could you ensure you are setting the version
properly
> > in
> > > >> your
> > > >> > > client.
> > > >> > >
> > > >> > > Error processing control packet usually means the client
is
> doing
> > > >> > something
> > > >> > > wrong.  If you send me your test case / reproducer, I will
take
> a
> > > >> look.
> > > >> > >
> > > >> > > Thanks
> > > >> > > Martyn
> > > >> > >
> > > >> > > On Thu, May 26, 2016 at 9:06 AM, Luca Capra <
> luca.capra@gmail.com
> > >
> > > >> > wrote:
> > > >> > >
> > > >> > > > Hi Martyn,
> > > >> > > > thank you for your feedback!
> > > >> > > >
> > > >> > > > I had in fact two different acceptor on my broker.xml.
I'm now
> > > using
> > > >> > just
> > > >> > > > one now. I've also moved to latest master 1.3-SNAPSHOT
from
> git
> > > >> > > >
> > > >> > > > I noticed I get this exception now on connection via
mqtt
> > > >> > > >
> > > >> > > > WARN: Error processing Control Packet, Disconnecting
Client2
> > > >> > > >
> > > >> > > > From the debugger I can see it is an ArrayOutOfBoundException
> > > which
> > > >> > > happens
> > > >> > > > somewhere around ctx.flush() in MqttProtocolHandler.
> sendConnack
> > > >> > > >
> > > >> > > > The client is mqttjs a nodejs based module implementing
3 ->
> > 3.1.1
> > > >> mqtt
> > > >> > > > version
> > > >> > > >
> > > >> > > > I'm using a custom SecurityManager, but should not
be at the
> > cause
> > > >> of
> > > >> > > such
> > > >> > > > issue
> > > >> > > >
> > > >> > > > Need to investigate better
> > > >> > > >
> > > >> > > > Best
> > > >> > > > Luca
> > > >> > > >
> > > >> > > > 2016-05-25 21:40 GMT+02:00 Martyn Taylor <mtaylor@redhat.com
> >:
> > > >> > > >
> > > >> > > > > Hi Luca,
> > > >> > > > >
> > > >> > > > > You don't need any specific configuration to do
this.  You
> can
> > > >> just
> > > >> > set
> > > >> > > > up
> > > >> > > > > a MQTT Client and a STOMP client and start sending/receiving
> > > from
> > > >> the
> > > >> > > > same
> > > >> > > > > address.
> > > >> > > > >
> > > >> > > > > There are a couple of issues with Artemis versions
<=1.2.0.
> > > I've
> > > >> > fixed
> > > >> > > > > these issues on master and will be doing a 1.3.0
release
> very
> > > >> soon,
> > > >> > it
> > > >> > > > > should be available in the next week or so, your
best bet is
> > to
> > > >> wait
> > > >> > > for
> > > >> > > > > this.
> > > >> > > > >
> > > >> > > > > I've also added a simple test to that shows this
working.
> > See:
> > > >> > > > >
> > > >> > > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > > https://github.com/apache/activemq-artemis/pull/543/commits/
> > 62d284d7765218ced2d0f441cf26ffaaaf3c26f2
> > > >> > > > >
> > > >> > > > > Thanks
> > > >> > > > > Martyn
> > > >> > > > >
> > > >> > > > >
> > > >> > > > > On Wed, May 25, 2016 at 3:58 PM, Luca Capra <
> > > luca.capra@gmail.com
> > > >> >
> > > >> > > > wrote:
> > > >> > > > >
> > > >> > > > > > Hi all,
> > > >> > > > > > on a project I'm working on I've switched
from Apollo to
> > > >> Artemis.
> > > >> > > > > >
> > > >> > > > > > I'm running Artemis as an embed server and
would like to
> > have
> > > >> > > > > > inter-protocol communication between stomp
and mqtt.
> > > >> > > > > >
> > > >> > > > > > What I'm missing is if this can be done from
configuration
> > or
> > > >> > > creating
> > > >> > > > an
> > > >> > > > > > mqtt and stomp client each one to deliver
messages the
> other
> > > >> one.
> > > >> > > > > >
> > > >> > > > > > Thank you
> > > >> > > > > > Luca
> > > >> > > > > >
> > > >> > > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > > >
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message