Skip to main content

A Vert.x client allowing applications to interact with a RabbitMQ broker (AMQP 0.9.1)

This service is experimental and the APIs are likely to change before settling down.

Getting Started

Maven

Add the following dependency to your maven project

<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-rabbitmq-client</artifactId>
  <version>3.3.3</version>
</dependency>

Gradle

Add the following dependency to your gradle project

dependencies {
  compile 'io.vertx:vertx-rabbitmq-client:3.3.3'
}

Create a client

You can create a client instance as follows using a full amqp uri:

var RabbitMQClient = require("vertx-rabbitmq-js/rabbit_mq_client");
var config = {
};
// full amqp uri
config.uri = "amqp://xvjvsrrc:VbuL1atClKt7zVNQha0bnnScbNvGiqgb@moose.rmq.cloudamqp.com/xvjvsrrc";
var client = RabbitMQClient.create(vertx, config);

Or you can also specify individual parameters manually:

var RabbitMQClient = require("vertx-rabbitmq-js/rabbit_mq_client");
var config = {
};
// Each parameter is optional
// The default parameter with be used if the parameter is not set
config.user = "user1";
config.password = "password1";
config.host = "localhost";
config.port = 5672;
config.virtualHost = "vhost1";
config.connectionTimeout = 60;
config.requestedHeartbeat = 60;
config.handshakeTimeout = 60;
config.requestedChannelMax = 5;
config.networkRecoveryInterval = 5;
config.automaticRecoveryEnabled = true;

var client = RabbitMQClient.create(vertx, config);

Operations

The following are some examples of the operations supported by the RabbitMQService API.

Consult the javadoc/documentation for detailed information on all API methods.

Publish

Publish a message to a queue

var message = {
  "body" : "Hello RabbitMQ, from Vert.x !"
};
client.basicPublish("", "my.queue", message, function (pubResult, pubResult_err) {
  if (pubResult_err == null) {
    console.log("Message published !");
  } else {
    pubResult_err.printStackTrace();
  }
});

Consume

Consume messages from a queue

// Create the event bus handler which messages will be sent to
// Create the event bus handler which messages will be sent to
vertx.eventBus().consumer("my.address", function (msg) {
  var json = msg.body();
  console.log("Got message: " + json.body);
});

// Setup the link between rabbitmq consumer and event bus address
client.basicConsume("my.queue", "my.address", function (consumeResult, consumeResult_err) {
  if (consumeResult_err == null) {
    console.log("RabbitMQ consumer created !");
  } else {
    consumeResult_err.printStackTrace();
  }
});

Get

Will get a message from a queue

client.basicGet("my.queue", true, function (getResult, getResult_err) {
  if (getResult_err == null) {
    var msg = getResult;
    console.log("Got message: " + msg.body);
  } else {
    getResult_err.printStackTrace();
  }
});

Consume messages without auto-ack

// Create the event bus handler which messages will be sent to
vertx.eventBus().consumer("my.address", function (msg) {
  var json = msg.body();
  console.log("Got message: " + json.body);
  // ack
  client.basicAck(json.deliveryTag, false, function (asyncResult, asyncResult_err) {
  });
});

// Setup the link between rabbitmq consumer and event bus address
client.basicConsume("my.queue", "my.address", false, function (consumeResult, consumeResult_err) {
  if (consumeResult_err == null) {
    console.log("RabbitMQ consumer created !");
  } else {
    consumeResult_err.printStackTrace();
  }
});

Running the tests

You will need to have RabbitMQ installed and running with default ports on localhost for this to work. <a href="mailto:nscavell@redhat.com">Nick Scavelli</a>