[rabbitmq-discuss] Cannot get MQTT->AMQP to work

Dejan Glozic dejan.glozic at gmail.com
Wed Apr 16 23:29:41 BST 2014


I am banging my head on my desk the whole afternoon trying to figure this 
out. I am trying to publish a message into an MQTT topic using Eclipse MQTT 
Paho client, and receive it using RabbitMQ AMQP Java client.

I am using RabbitMQ for Windows, version 3.2.4.

>From what I was reading, MQTT plug-in will publish into the default 
'amq.topic' exchange, and I can bind a queue to that exchange and start 
listening.

When I publish a message into the exchange using AMQP client, the AMQP 
client on the receiving end will get it.

When I publish a message using MQTT client, another MQTT client on the 
receiving end will get it.

But for the love of God I cannot get the cross-protocol to work.

Here is the MQTT client that publishes:


MqttClient client;

*try* {

    client = *new* MqttClient("tcp://"+host+":1883", "pahomqttpublish1");

    client.connect();

    MqttMessage message = *new* MqttMessage(messageText.getBytes());

    client.publish(queueName, message);

    System.*out*.println(" [x] Sent to MQTT topic '" +queueName+"': "+ 
message + "'"); 

    client.disconnect(); 

} *catch* (MqttException e) {

    // *TODO* Auto-generated catch block

    e.printStackTrace();

}


And here is the AMQP client that is supposed to receive it:

public static final String QUEUE_NAME="workerQueue";

*public* *static* *void* main(String[] args) *throws* IOException, 
InterruptedException {

   ConnectionFactory factory = *new* ConnectionFactory();

   factory.setHost("localhost");

   Connection connection = factory.newConnection();

   Channel channel = connection.createChannel();

   channel.queueDeclare(QUEUE_NAME, *true*, *false*, *false*, *null*);

   channel.queueBind(QUEUE_NAME, "amq.topic", "builds");

   System.*out*.println(" [*] Waiting for messages. To exit press CTRL+C");


   QueueingConsumer consumer = *new* QueueingConsumer(channel);

   channel.basicConsume(QUEUE_NAME, *true*, consumer);

*   while* (*true*) {

      QueueingConsumer.Delivery delivery = consumer.nextDelivery();

      String message = *new* String(delivery.getBody());

      String routingKey = delivery.getEnvelope().getRoutingKey();

      System.*out*.println(" [x] Received '" + routingKey + "':'" + message 
+ "'");

   }

}


The client above will receive the message when published into "amq.topic" 
exchange by another AMQP client.

Anything stupid and obvious I am missing?

Dejan


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20140416/3d35961c/attachment.html>


More information about the rabbitmq-discuss mailing list