Paho Component

Table of Contents

URI format
Adding the component to the project
Default payload type
Paho Options
Headers
See Also

INFO: Available as of Camel 2.16 

Paho component provides connector for the MQTT messaging protocol using the Eclipse Paho library. Paho is one of the most popular MQTT libraries, so if you would like to integrate it with your Java project - Camel Paho connector is a way to go.

URI format

paho:queueName[?options]

For example the following snippet reads messages from the MQTT broker installed on the same host as the Camel router:

from("paho:some/queue").
  to("mock:test");

While the snippet below sends message to the MQTT broker:

from("direct:test").
  to("paho:some/target/queue");

You can append query options to the URI in the following format: ?option=value&option=value&…​ . For example this is how to read messages from the remote MQTT broker: 

 

from("paho:some/queue?brokerUrl=tcp://iot.eclipse.org:1883").
  to("mock:test");

 

Adding the component to the project

Maven users will need to add the following dependency to their pom.xml for this component:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-paho</artifactId>
    <version>x.y.z</version>
    <!-- use the same version as your Camel core version -->
</dependency>

Keep in mind that Paho artifacts are not hosted in the Maven Central, so you need to add Eclipse Paho repository to your POM xml file:

<repositories>
  <repository>
    <id>eclipse-paho</id>
    <url>https://repo.eclipse.org/content/repositories/paho-releases</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository>
</repositories>

Default payload type

 

By default Camel Paho component operates on the binary payloads extracted out of (or put into) the MQTT message:

// Receive payload
byte[] payload = (byte[]) consumerTemplate.receiveBody("paho:topic");
 
// Send payload
byte[] payload = "message".getBytes();
producerTemplate.sendBody("paho:topic", payload);

 

But of course Camel build-in type conversion API can perform the automatic data type transformations for you. In the example below Camel automatically converts binary payload into String (and conversely):

 

// Receive payload
String payload = consumerTemplate.receiveBody("paho:topic", String.class);
 
// Send payload
String payload = "message";
producerTemplate.sendBody("paho:topic", payload);

Paho Options

The Paho component supports 3 options which are listed below.

{% raw %}

NameJava TypeDescription

brokerUrl

String

The URL of the MQTT broker.

clientId

String

MQTT client identifier.

connectOptions

MqttConnectOptions

Client connection options

{% endraw %}

The Paho component supports 12 endpoint options which are listed below:

{% raw %}

NameGroupDefaultJava TypeDescription

topic

common

 

String

Required Name of the topic

brokerUrl

common

tcp://localhost:1883

String

The URL of the MQTT broker.

clientId

common

 

String

MQTT client identifier.

connectOptions

common

 

MqttConnectOptions

Client connection options

filePersistenceDirectory

common

Current directory

String

Base directory used by the file persistence provider.

persistence

common

MEMORY

PahoPersistence

Client persistence to be used - memory or file.

qos

common

2

int

Client quality of service level (0-2).

retained

common

false

boolean

Retain option

bridgeErrorHandler

consumer

false

boolean

Allows for bridging the consumer to the Camel routing Error Handler which mean any exceptions occurred while the consumer is trying to pickup incoming messages or the likes will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions that will be logged at WARN/ERROR level and ignored.

exceptionHandler

consumer (advanced)

 

ExceptionHandler

To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.

exchangePattern

consumer (advanced)

 

ExchangePattern

Sets the exchange pattern when the consumer creates an exchange.

synchronous

advanced

false

boolean

Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).

{% endraw %}

Headers

The following headers are recognized by the Paho component:

HeaderJava constantEndpoint typeValue typeDescription

PahoOriginalMessage

PahoConstants.HEADER_ORIGINAL_MESSAGE

Consumer

org.eclipse.paho.client.mqttv3.MqttMessage

The original Paho message instance received by the client. *Deprecated:*from Camel 2.17 onwards the original MqttMessage is not stored as a header but on the org.apache.camel.component.paho.PahoMessage message that has a getter getMqttMessage.

CamelMqttTopic

PahoConstants.MQTT_TOPIC

Consumer

String

*Camel 2.17:*The topic

 

See Also