MQTT Client Publish And Subscribe Samples

About The Samples

In this sample, the TIBCO StreamBase® Output Adapter for MQTT Client Subscribe and TIBCO StreamBase® Input Adapter for MQTT Client Publish are used together to subscribe to and send data to an MQTT broker. The sample will initially subscribe to three message queues (Streambase0, Streambase1, Streambase2) each corresponding to their quality of service number.

The sample server configuration file in this sample contains connection information that is shared between the subscribe and publish adapters. For this demo, we are using the open Eclipse iot.eclipse.org mqtt sandbox server. Please see http://iot.eclipse.org/sandbox.html for further details about this sandbox server.

Running the Demo Sample

  1. In the Package Explorer, double-click to open Demo.sbapp. Make sure the application is the currently active tab in the EventFlow Editor.

  2. Click the Run button. This opens the SB Test/Debug perspective and starts the application.

  3. Select the PublishData Stream in the Manual Input window.

    Enter the following values:

    1. Topic: Streambase2

    2. Payload: This is a test message

    3. Qos: 2

    And click the Send Data button.

  4. Repeat this step sending messages to the various message queues. Note that Qos can only be set as high as the message queue default allows. For example, you cannot send a Qos level 2 message to Streambase0 because that message queue was setup to only handle Qos level 0 messages.

  5. In the Application Output view, observe tuples emitted on the PublishStatus and Data output streams.

  6. Select individual tuples emitted from the PublishStatus and Data streams, to analyze and understand their structure.

  7. When done, press F9 or click the Stop Running Application button.

Running the Demo Manual Ack Sample

It is important to note that MQTT requires various settings in order to set up persistent connections.

  1. A ClientId set in the sbd.sbconf connection settings. If left blank, then a default is used and persistence will not service program restarts.

  2. The isCleanSession setting must be set to false in the sbd.sbconf connection settings.

  3. The manualAcks setting must be set to true in the sbd.sbconf.

  4. Messages must be set to QoS level 2.

  5. Messages must be ACKed by the MQTTClientAck adapter or they will be assumed to be undelivered and delivered during the next connection (this sample demonstrates this).

  6. If you plan to stop your running process and restart you should change PersistenceType to file in the sbd.sbconf to maintain state across program restarts.

To run the sample, do the following:

  1. In the Package Explorer, double-click to open DemoManualAck.sbapp. Make sure the application is the currently active tab in the EventFlow Editor.

  2. Click the Run button. This opens the SB Test/Debug perspective and starts the application.

  3. This sample will automatically connect to the iot.eclipse.org MQTT broker and send five messages to the channel, StreambaseAck. The MQTT Client Subscribe adapter will acknowledge three of the five and then disconnect, reconnect, and acknowledge the remaining two.

  4. In the Application Output view, observe tuples emitted on the PublishStatus and Data output streams.

  5. When done, press F9 or click the Stop Running Application button.

Importing This Sample into StreamBase Studio

In StreamBase Studio, import this sample with the following steps:

  • From the top menu, select FileLoad StreamBase Sample.

  • Type mqtt to narrow the list of samples.

  • Select MQTT Client Adapters from the StreamBase Standard Adapters category.

  • Click OK.

StreamBase Studio creates a single project containing the sample files.

Sample Location

When you load the sample into StreamBase Studio, Studio copies the sample project's files to your Studio workspace, which is normally part of your home directory, with full access rights.

Important

Load this sample in StreamBase Studio, and thereafter use the Studio workspace copy of the sample to run and test it, even when running from the command prompt.

Using the workspace copy of the sample avoids the permission problems that can occur when trying to work with the initially installed location of the sample. The default workspace location for this sample is:

studio-workspace/sample_adapter_embedded_mqtt-client

See Default Installation Directories for the location of studio-workspace on your system.