[[paho-component]]
= Paho Component
:page-source: components/camel-paho/src/main/docs/paho-component.adoc

*Available as of Camel version 2.16*

Paho component provides connector for the MQTT messaging protocol using
the https://eclipse.org/paho/[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.

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

[source,xml]
----
<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:

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


== URI format

[source]
----
paho:topic[?options]
----

Where *topic* is the name of the topic.


== Options

// component options: START
The Paho component supports 4 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *configuration* (common) | To use the shared Paho configuration |  | PahoConfiguration
| *client* (advanced) | To use a shared Paho client |  | MqttClient
| *brokerUrl* (common) | The URL of the MQTT broker. |  | String
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END


// endpoint options: START
The Paho endpoint is configured using URI syntax:

----
paho:topic
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *topic* | *Required* Name of the topic |  | String
|===


=== Query Parameters (33 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *automaticReconnect* (common) | Sets whether the client will automatically attempt to reconnect to the server if the connection is lost. If set to false, the client will not attempt to automatically reconnect to the server in the event that the connection is lost. If set to true, in the event that the connection is lost, the client will attempt to reconnect to the server. It will initially wait 1 second before it attempts to reconnect, for every failed reconnect attempt, the delay will double until it is at 2 minutes at which point the delay will stay at 2 minutes. | true | boolean
| *brokerUrl* (common) | The URL of the MQTT broker. | tcp://localhost:1883 | String
| *cleanSession* (common) | Sets whether the client and server should remember state across restarts and reconnects. If set to false both the client and server will maintain state across restarts of the client, the server and the connection. As state is maintained: Message delivery will be reliable meeting the specified QOS even if the client, server or connection are restarted. The server will treat a subscription as durable. If set to true the client and server will not maintain state across restarts of the client, the server or the connection. This means Message delivery to the specified QOS cannot be maintained if the client, server or connection are restarted The server will treat a subscription as non-durable | true | boolean
| *clientId* (common) | MQTT client identifier. The identifier must be unique. |  | String
| *connectionTimeout* (common) | Sets the connection timeout value. This value, measured in seconds, defines the maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails. | 30 | int
| *filePersistenceDirectory* (common) | Base directory used by file persistence. Will by default use user directory. |  | String
| *keepAliveInterval* (common) | Sets the keep alive interval. This value, measured in seconds, defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small ping message, which the server will acknowledge. A value of 0 disables keepalive processing in the client. The default value is 60 seconds | 60 | int
| *maxInflight* (common) | Sets the max inflight. please increase this value in a high traffic environment. The default value is 10 | 10 | int
| *maxReconnectDelay* (common) | Get the maximum time (in millis) to wait between reconnects | 128000 | int
| *mqttVersion* (common) | Sets the MQTT version. The default action is to connect with version 3.1.1, and to fall back to 3.1 if that fails. Version 3.1.1 or 3.1 can be selected specifically, with no fall back, by using the MQTT_VERSION_3_1_1 or MQTT_VERSION_3_1 options respectively. |  | int
| *persistence* (common) | Client persistence to be used - memory or file. | MEMORY | PahoPersistence
| *qos* (common) | Client quality of service level (0-2). | 2 | int
| *retained* (common) | Retain option | false | boolean
| *serverURIs* (common) | Set a list of one or more serverURIs the client may connect to. Multiple servers can be separated by comma. Each serverURI specifies the address of a server that the client may connect to. Two types of connection are supported tcp:// for a TCP connection and ssl:// for a TCP connection secured by SSL/TLS. For example: tcp://localhost:1883 ssl://localhost:8883 If the port is not specified, it will default to 1883 for tcp:// URIs, and 8883 for ssl:// URIs. If serverURIs is set then it overrides the serverURI parameter passed in on the constructor of the MQTT client. When an attempt to connect is initiated the client will start with the first serverURI in the list and work through the list until a connection is established with a server. If a connection cannot be made to any of the servers then the connect attempt fails. Specifying a list of servers that a client may connect to has several uses: High Availability and reliable message delivery Some MQTT servers support a high availability feature where two or more equal MQTT servers share state. An MQTT client can connect to any of the equal servers and be assured that messages are reliably delivered and durable subscriptions are maintained no matter which server the client connects to. The cleansession flag must be set to false if durable subscriptions and/or reliable message delivery is required. Hunt List A set of servers may be specified that are not equal (as in the high availability option). As no state is shared across the servers reliable message delivery and durable subscriptions are not valid. The cleansession flag must be set to true if the hunt list mode is used |  | String
| *willPayload* (common) | Sets the Last Will and Testament (LWT) for the connection. In the event that this client unexpectedly loses its connection to the server, the server will publish a message to itself using the supplied details. The topic to publish to The byte payload for the message. The quality of service to publish the message at (0, 1 or 2). Whether or not the message should be retained. |  | String
| *willQos* (common) | Sets the Last Will and Testament (LWT) for the connection. In the event that this client unexpectedly loses its connection to the server, the server will publish a message to itself using the supplied details. The topic to publish to The byte payload for the message. The quality of service to publish the message at (0, 1 or 2). Whether or not the message should be retained. |  | int
| *willRetained* (common) | Sets the Last Will and Testament (LWT) for the connection. In the event that this client unexpectedly loses its connection to the server, the server will publish a message to itself using the supplied details. The topic to publish to The byte payload for the message. The quality of service to publish the message at (0, 1 or 2). Whether or not the message should be retained. | false | boolean
| *willTopic* (common) | Sets the Last Will and Testament (LWT) for the connection. In the event that this client unexpectedly loses its connection to the server, the server will publish a message to itself using the supplied details. The topic to publish to The byte payload for the message. The quality of service to publish the message at (0, 1 or 2). Whether or not the message should be retained. |  | String
| *bridgeErrorHandler* (consumer) | 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 or ERROR level and ignored. | false | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *client* (advanced) | To use an existing mqtt client |  | MqttClient
| *customWebSocketHeaders* (advanced) | Sets the Custom WebSocket Headers for the WebSocket Connection. |  | Properties
| *executorServiceTimeout* (advanced) | Set the time in seconds that the executor service should wait when terminating before forcefully terminating. It is not recommended to change this value unless you are absolutely sure that you need to. | 1 | int
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *httpsHostnameVerification Enabled* (security) | Whether SSL HostnameVerifier is enabled or not. The default value is true. | true | boolean
| *password* (security) | Password to be used for authentication against the MQTT broker |  | String
| *socketFactory* (security) | Sets the SocketFactory to use. This allows an application to apply its own policies around the creation of network sockets. If using an SSL connection, an SSLSocketFactory can be used to supply application-specific security settings. |  | SocketFactory
| *sslClientProps* (security) | Sets the SSL properties for the connection. Note that these properties are only valid if an implementation of the Java Secure Socket Extensions (JSSE) is available. These properties are not used if a custom SocketFactory has been set. The following properties can be used: com.ibm.ssl.protocol One of: SSL, SSLv3, TLS, TLSv1, SSL_TLS. com.ibm.ssl.contextProvider Underlying JSSE provider. For example IBMJSSE2 or SunJSSE com.ibm.ssl.keyStore The name of the file that contains the KeyStore object that you want the KeyManager to use. For example /mydir/etc/key.p12 com.ibm.ssl.keyStorePassword The password for the KeyStore object that you want the KeyManager to use. The password can either be in plain-text, or may be obfuscated using the static method: com.ibm.micro.security.Password.obfuscate(char password). This obfuscates the password using a simple and insecure XOR and Base64 encoding mechanism. Note that this is only a simple scrambler to obfuscate clear-text passwords. com.ibm.ssl.keyStoreType Type of key store, for example PKCS12, JKS, or JCEKS. com.ibm.ssl.keyStoreProvider Key store provider, for example IBMJCE or IBMJCEFIPS. com.ibm.ssl.trustStore The name of the file that contains the KeyStore object that you want the TrustManager to use. com.ibm.ssl.trustStorePassword The password for the TrustStore object that you want the TrustManager to use. The password can either be in plain-text, or may be obfuscated using the static method: com.ibm.micro.security.Password.obfuscate(char password). This obfuscates the password using a simple and insecure XOR and Base64 encoding mechanism. Note that this is only a simple scrambler to obfuscate clear-text passwords. com.ibm.ssl.trustStoreType The type of KeyStore object that you want the default TrustManager to use. Same possible values as keyStoreType. com.ibm.ssl.trustStoreProvider Trust store provider, for example IBMJCE or IBMJCEFIPS. com.ibm.ssl.enabledCipherSuites A list of which ciphers are enabled. Values are dependent on the provider, for example: SSL_RSA_WITH_AES_128_CBC_SHA;SSL_RSA_WITH_3DES_EDE_CBC_SHA. com.ibm.ssl.keyManager Sets the algorithm that will be used to instantiate a KeyManagerFactory object instead of using the default algorithm available in the platform. Example values: IbmX509 or IBMJ9X509. com.ibm.ssl.trustManager Sets the algorithm that will be used to instantiate a TrustManagerFactory object instead of using the default algorithm available in the platform. Example values: PKIX or IBMJ9X509. |  | Properties
| *sslHostnameVerifier* (security) | Sets the HostnameVerifier for the SSL connection. Note that it will be used after handshake on a connection and you should do actions by yourself when hostname is verified error. There is no default HostnameVerifier |  | HostnameVerifier
| *userName* (security) | Username to be used for authentication against the MQTT broker |  | String
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-paho-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 30 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.paho.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.paho.broker-url* | The URL of the MQTT broker. |  | String
| *camel.component.paho.client* | To use a shared Paho client. The option is a org.eclipse.paho.client.mqttv3.MqttClient type. |  | String
| *camel.component.paho.configuration.automatic-reconnect* | Sets whether the client will automatically attempt to reconnect to the server if the connection is lost. <ul> <li>If set to false, the client will not attempt to automatically reconnect to the server in the event that the connection is lost.</li> <li>If set to true, in the event that the connection is lost, the client will attempt to reconnect to the server. It will initially wait 1 second before it attempts to reconnect, for every failed reconnect attempt, the delay will double until it is at 2 minutes at which point the delay will stay at 2 minutes.</li> </ul> | true | Boolean
| *camel.component.paho.configuration.broker-url* | The URL of the MQTT broker. | tcp://localhost:1883 | String
| *camel.component.paho.configuration.clean-session* | Sets whether the client and server should remember state across restarts and reconnects. <ul> <li>If set to false both the client and server will maintain state across restarts of the client, the server and the connection. As state is maintained: <ul> <li>Message delivery will be reliable meeting the specified QOS even if the client, server or connection are restarted. <li>The server will treat a subscription as durable. </ul> <li>If set to true the client and server will not maintain state across restarts of the client, the server or the connection. This means <ul> <li>Message delivery to the specified QOS cannot be maintained if the client, server or connection are restarted <li>The server will treat a subscription as non-durable </ul> </ul> | true | Boolean
| *camel.component.paho.configuration.client-id* | MQTT client identifier. The identifier must be unique. |  | String
| *camel.component.paho.configuration.connection-timeout* | Sets the connection timeout value. This value, measured in seconds, defines the maximum time interval the client will wait for the network connection to the MQTT server to be established. The default timeout is 30 seconds. A value of 0 disables timeout processing meaning the client will wait until the network connection is made successfully or fails. | 30 | Integer
| *camel.component.paho.configuration.custom-web-socket-headers* | Sets the Custom WebSocket Headers for the WebSocket Connection. |  | Properties
| *camel.component.paho.configuration.executor-service-timeout* | Set the time in seconds that the executor service should wait when terminating before forcefully terminating. It is not recommended to change this value unless you are absolutely sure that you need to. | 1 | Integer
| *camel.component.paho.configuration.file-persistence-directory* | Base directory used by file persistence. Will by default use user directory. |  | String
| *camel.component.paho.configuration.https-hostname-verification-enabled* | Whether SSL HostnameVerifier is enabled or not. The default value is true. | true | Boolean
| *camel.component.paho.configuration.keep-alive-interval* | Sets the keep alive interval. This value, measured in seconds, defines the maximum time interval between messages sent or received. It enables the client to detect if the server is no longer available, without having to wait for the TCP/IP timeout. The client will ensure that at least one message travels across the network within each keep alive period. In the absence of a data-related message during the time period, the client sends a very small ping message, which the server will acknowledge. A value of 0 disables keepalive processing in the client. <p> The default value is 60 seconds </p> | 60 | Integer
| *camel.component.paho.configuration.max-inflight* | Sets the max inflight. please increase this value in a high traffic environment. <p> The default value is 10 </p> | 10 | Integer
| *camel.component.paho.configuration.max-reconnect-delay* | Get the maximum time (in millis) to wait between reconnects | 128000 | Integer
| *camel.component.paho.configuration.mqtt-version* | Sets the MQTT version. The default action is to connect with version 3.1.1, and to fall back to 3.1 if that fails. Version 3.1.1 or 3.1 can be selected specifically, with no fall back, by using the MQTT_VERSION_3_1_1 or MQTT_VERSION_3_1 options respectively. |  | Integer
| *camel.component.paho.configuration.password* | Password to be used for authentication against the MQTT broker |  | String
| *camel.component.paho.configuration.persistence* | Client persistence to be used - memory or file. |  | PahoPersistence
| *camel.component.paho.configuration.qos* | Client quality of service level (0-2). | 2 | Integer
| *camel.component.paho.configuration.retained* | Retain option | false | Boolean
| *camel.component.paho.configuration.server-u-r-is* | Set a list of one or more serverURIs the client may connect to. Multiple servers can be separated by comma. <p> Each <code>serverURI</code> specifies the address of a server that the client may connect to. Two types of connection are supported <code>tcp://</code> for a TCP connection and <code>ssl://</code> for a TCP connection secured by SSL/TLS. For example: <ul> <li><code>tcp://localhost:1883</code></li> <li><code>ssl://localhost:8883</code></li> </ul> If the port is not specified, it will default to 1883 for <code>tcp://</code>" URIs, and 8883 for <code>ssl://</code> URIs. <p> If serverURIs is set then it overrides the serverURI parameter passed in on the constructor of the MQTT client. <p> When an attempt to connect is initiated the client will start with the first serverURI in the list and work through the list until a connection is established with a server. If a connection cannot be made to any of the servers then the connect attempt fails. <p> Specifying a list of servers that a client may connect to has several uses: <ol> <li>High Availability and reliable message delivery <p> Some MQTT servers support a high availability feature where two or more "equal" MQTT servers share state. An MQTT client can connect to any of the "equal" servers and be assured that messages are reliably delivered and durable subscriptions are maintained no matter which server the client connects to. </p> <p> The cleansession flag must be set to false if durable subscriptions and/or reliable message delivery is required. </p> </li> <li>Hunt List <p> A set of servers may be specified that are not "equal" (as in the high availability option). As no state is shared across the servers reliable message delivery and durable subscriptions are not valid. The cleansession flag must be set to true if the hunt list mode is used </p> </li> </ol> |  | String
| *camel.component.paho.configuration.socket-factory* | Sets the SocketFactory to use. This allows an application to apply its own policies around the creation of network sockets. If using an SSL connection, an SSLSocketFactory can be used to supply application-specific security settings. |  | SocketFactory
| *camel.component.paho.configuration.ssl-client-props* | Sets the SSL properties for the connection. <p> Note that these properties are only valid if an implementation of the Java Secure Socket Extensions (JSSE) is available. These properties are <em>not</em> used if a custom SocketFactory has been set. The following properties can be used: </p> <dl> <dt>com.ibm.ssl.protocol</dt> <dd>One of: SSL, SSLv3, TLS, TLSv1, SSL_TLS.</dd> <dt>com.ibm.ssl.contextProvider <dd>Underlying JSSE provider. For example "IBMJSSE2" or "SunJSSE"</dd> <dt>com.ibm.ssl.keyStore</dt> <dd>The name of the file that contains the KeyStore object that you want the KeyManager to use. For example /mydir/etc/key.p12</dd> <dt>com.ibm.ssl.keyStorePassword</dt> <dd>The password for the KeyStore object that you want the KeyManager to use. The password can either be in plain-text, or may be obfuscated using the static method: <code>com.ibm.micro.security.Password.obfuscate(char[] password)</code>. This obfuscates the password using a simple and insecure XOR and Base64 encoding mechanism. Note that this is only a simple scrambler to obfuscate clear-text passwords.</dd> <dt>com.ibm.ssl.keyStoreType</dt> <dd>Type of key store, for example "PKCS12", "JKS", or "JCEKS".</dd> <dt>com.ibm.ssl.keyStoreProvider</dt> <dd>Key store provider, for example "IBMJCE" or "IBMJCEFIPS".</dd> <dt>com.ibm.ssl.trustStore</dt> <dd>The name of the file that contains the KeyStore object that you want the TrustManager to use.</dd> <dt>com.ibm.ssl.trustStorePassword</dt> <dd>The password for the TrustStore object that you want the TrustManager to use. The password can either be in plain-text, or may be obfuscated using the static method: <code>com.ibm.micro.security.Password.obfuscate(char[] password)</code>. This obfuscates the password using a simple and insecure XOR and Base64 encoding mechanism. Note that this is only a simple scrambler to obfuscate clear-text passwords.</dd> <dt>com.ibm.ssl.trustStoreType</dt> <dd>The type of KeyStore object that you want the default TrustManager to use. Same possible values as "keyStoreType".</dd> <dt>com.ibm.ssl.trustStoreProvider</dt> <dd>Trust store provider, for example "IBMJCE" or "IBMJCEFIPS".</dd> <dt>com.ibm.ssl.enabledCipherSuites</dt> <dd>A list of which ciphers are enabled. Values are dependent on the provider, for example: SSL_RSA_WITH_AES_128_CBC_SHA;SSL_RSA_WITH_3DES_EDE_CBC_SHA.</dd> <dt>com.ibm.ssl.keyManager</dt> <dd>Sets the algorithm that will be used to instantiate a KeyManagerFactory object instead of using the default algorithm available in the platform. Example values: "IbmX509" or "IBMJ9X509".</dd> <dt>com.ibm.ssl.trustManager</dt> <dd>Sets the algorithm that will be used to instantiate a TrustManagerFactory object instead of using the default algorithm available in the platform. Example values: "PKIX" or "IBMJ9X509".</dd> </dl> |  | Properties
| *camel.component.paho.configuration.ssl-hostname-verifier* | Sets the HostnameVerifier for the SSL connection. Note that it will be used after handshake on a connection and you should do actions by yourself when hostname is verified error. <p> There is no default HostnameVerifier </p> |  | HostnameVerifier
| *camel.component.paho.configuration.user-name* | Username to be used for authentication against the MQTT broker |  | String
| *camel.component.paho.configuration.will-payload* | Sets the "Last Will and Testament" (LWT) for the connection. In the event that this client unexpectedly loses its connection to the server, the server will publish a message to itself using the supplied details. The topic to publish to The byte payload for the message. The quality of service to publish the message at (0, 1 or 2). Whether or not the message should be retained. |  | String
| *camel.component.paho.configuration.will-qos* | Sets the "Last Will and Testament" (LWT) for the connection. In the event that this client unexpectedly loses its connection to the server, the server will publish a message to itself using the supplied details. The topic to publish to The byte payload for the message. The quality of service to publish the message at (0, 1 or 2). Whether or not the message should be retained. |  | Integer
| *camel.component.paho.configuration.will-retained* | Sets the "Last Will and Testament" (LWT) for the connection. In the event that this client unexpectedly loses its connection to the server, the server will publish a message to itself using the supplied details. The topic to publish to The byte payload for the message. The quality of service to publish the message at (0, 1 or 2). Whether or not the message should be retained. | false | Boolean
| *camel.component.paho.configuration.will-topic* | Sets the "Last Will and Testament" (LWT) for the connection. In the event that this client unexpectedly loses its connection to the server, the server will publish a message to itself using the supplied details. The topic to publish to The byte payload for the message. The quality of service to publish the message at (0, 1 or 2). Whether or not the message should be retained. |  | String
| *camel.component.paho.enabled* | Enable paho component | true | Boolean
|===
// spring-boot-auto-configure options: END



== Headers

The following headers are recognized by the Paho component:

[width="100%",cols="10%,10%,10%,10%,60%",options="header",]
|===
|Header |Java constant |Endpoint type |Value type |Description

|CamelMqttTopic |PahoConstants.MQTT_TOPIC |Consumer |String |The name of the topic
|CamelMqttQoS |PahoConstants.MQTT_QOS |Consumer |Integer |QualityOfService of the incoming message
|CamelPahoOverrideTopic |PahoConstants.CAMEL_PAHO_OVERRIDE_TOPIC |Producer |String |Name of topic to override and send to instead of topic specified on endpoint
|===


== Default payload type

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

[source,java]
----
// 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 xref:manual::type-converter.adoc[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):

[source,java]
----
// Receive payload
String payload = consumerTemplate.receiveBody("paho:topic", String.class);

// Send payload
String payload = "message";
producerTemplate.sendBody("paho:topic", payload);
----


== Samples

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

[source,java]
----
from("paho:some/queue")
    .to("mock:test");
----

While the snippet below sends message to the MQTT broker:

[source,java]
----
from("direct:test")
    .to("paho:some/target/queue");
----

For example this is how to read messages from the remote MQTT broker: 

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

And here we override the default topic and set to a dynamic topic

[source,java]
----
from("direct:test")
    .setHeader(PahoConstants.CAMEL_PAHO_OVERRIDE_TOPIC, simple("${header.customerId}"))
    .to("paho:some/target/queue");
----
