Introduction
This sample demonstrates how the MQTT Connector publishes the message on a particular topic and how the MQTT client which is subscribes to that topic receives it.
Prerequisites
- axis2-transport-mqtt-1.0.0.jar
- mqtt-client-0.4.0.jar
- mqtt-connector-1.0.0.zip
mosquitto-1.3.4
Building the Configuration
For Consumer ESB
Download wso2esb-4.9.0-BETA-SNAPSHOT and do the following configuration changes.
Download the following client libraries to <ESB_HOME>/repository/components/lib directory.
- axis2-transport-mqtt-1.0.0.jar
- mqtt-client-0.4.0.jar
Enable the transport receiver and sender in <ESB_HOME>/repository/conf/axis2
<transportreceiver class="org.apache.axis2.transport.mqtt.MqttListener" name="mqtt"> <parameter locked="false" name="mqttConFactory"> <parameter locked="false" name="mqtt.server.host.name">localhost</parameter> <parameter name="mqtt.connection.factory">mqttConFactory</parameter> <parameter locked="false" name="mqtt.server.port">1883</parameter> <parameter locked="false" name="mqtt.client.id">client-id.1430394313438</parameter> <parameter locked="false" name="mqtt.topic.name">esb.test2</parameter> </parameter> </transportreceiver> <transportsender class="org.apache.axis2.transport.mqtt.MqttSender" name="mqtt"> </transportsender>
Add the XML configuration for the inbound endpoint as follows:
<?xml version="1.0" encoding="UTF-8"?> <inboundEndpoint xmlns="http://ws.apache.org/ns/synapse" name="test" sequence="TestIn" onError="TestIn" protocol="mqtt" suspend="false"> <parameters> <parameter name="sequential">true</parameter> <parameter name="mqtt.connection.factory">mqttFactory</parameter> <parameter name="mqtt.server.host.name">localhost</parameter> <parameter name="mqtt.server.port">1883</parameter> <parameter name="mqtt.topic.name">esb.test2</parameter> <parameter name="mqtt.subscription.qos">2</parameter> <parameter name="mqtt.client.id">client-id.143094112027</parameter> <parameter name="content.type">application/xml</parameter> <parameter name="mqtt.session.clean">false</parameter> <parameter name="mqtt.ssl.enable">false</parameter> <parameter name="mqtt.subscription.username">elil1</parameter> <parameter name="mqtt.subscription.password">e13</parameter> <parameter name="mqtt.temporary.store.directory">my</parameter> <parameter name="mqtt.blocking.sender">false</parameter> </parameters> </inboundEndpoint>
<?xml version="1.0" encoding="UTF-8"?> <sequence xmlns="http://ws.apache.org/ns/synapse" name="TestIn"> <log level="full"/> <drop/> </sequence>
For Publisher ESB
Download wso2esb-4.9.0-BETA-SNAPSHOT and do the following configuration changes.
Upload the mqtt-connector-1.0.0.zip to esb.
Add the following proxy and local entries.
<?xml version="1.0" encoding="UTF-8"?> <proxy xmlns="http://ws.apache.org/ns/synapse" name="mqttXML" transports="https http" startOnLoad="true" trace="disable"> <description/> <target> <inSequence> <property name="msg" expression="//msg"/> <mqtt.publish configKey="xxx"> <topic>esb.test2</topic> <qos>2</qos> <msg>{$ctx:msg}</msg> <retained>true</retained> <disconnectAfter>false</disconnectAfter> </mqtt.publish> <respond/> </inSequence> <outSequence/> <faultSequence/> </target> </proxy>
<?xml version="1.0" encoding="UTF-8"?> <localEntry xmlns="http://ws.apache.org/ns/synapse" key="xxx"> <mqtt.init> <hostName>localhost</hostName> <port>1883</port> <sslEnable>false</sslEnable> <asyncClientEnable>true</asyncClientEnable> <username>admin</username> <password>0777</password> <lwMessage>lwMSG</lwMessage> </mqtt.init> <description/> </localEntry>
If you want to use the mosquito publisher you can start simply by typing the following in the console.
mosquitto_pub -h 127.0.0.1 -t esb.test2 -m "<msg><a>Testing123</a></msg>"
Executing the Request
Now once you are done with the configurations start the consumer and publisher ESBs. Start the mosquitto subscriber using
mosquitto_sub -h 127.0.0.1 -t esb.test2
Then give the following request to the proxy endpoint.
In the console you can see the following.