RabbitMQ Adapter Samples

About These Samples

This topic describes how to run the Spotfire Streaming Adapter for RabbitMQ sample applications, which illustrate how to use the RabbitMQ adapters when connecting a StreamBase application to a RabbitMQ server. The samples were built to replicate the tutorials that are found on the RabbitMQs website.

Before running any of the samples you must first edit the src/main/configurations/RabbitMQ.conf file and enter the correct connection information to your RabbitMQ server

Note

The adapters are built on top of the 3.6.0 version of the RabbitMQ client library.

The samples create queues and exchanges that are set to auto-delete on disconnect. This was done to reduce and clutter on your server when running the sample.

Importing This Sample into StreamBase Studio

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

  • From the top-level menu, select File>Import Samples and Community Content.

  • Enter rab To narrow the list of options.

  • Select RabbitMQ Producer, Consumer, Ack, and Nack adapters from the StreamBase Messaging Adapters category.

  • Click Import Now.

StreamBase Studio creates a single project containing the sample files.

Running the RabbitMQ HelloWorld Sample in StreamBase Studio

This sample demonstrates how to implement the HelloWorld Tutorial from the RabbitMQ website.

The steps to run this sample in Studio are as follows:

  1. In the Project Explorer view, open the sample you just loaded.

    If you see red marks on a project folder, wait a moment for the project to load its features.

    If the red marks do not resolve themselves after a minute, select the project, right-click, and select Maven>Update Project from the context menu.

  2. Open the src/main/eventflow/packageName folder.

  3. Open the HelloWorld.sbapp file and click the Run button. This opens the SB Test/Debug perspective and starts the module.

  4. In the Manual Input view, select the ProducerIn input stream.

    Enter some text into the message field.

    Click Send Data.

  5. In the Output Streams view, examine the output and see that the message you entered has now been output via the ConsumerData output stream.

  6. When done, press F9 or click the Terminate EventFlow Fragment button.

Running the RabbitMQ Work Queues Sample in StreamBase Studio

This sample demonstrates how to implement the Work Queues Tutorial from the RabbitMQ website.

This sample shows how to send time-consuming task among multiple works. Note that the number of instances of the consumer represent the number of available workers; in the sample it is set to two. This sample uses a main module, WorkQueues.sbapp and a submodule, WorkQueuesConsumer.sbapp. The submodule contains the consumer code and the main module uses the submodule with multiplicity enabled to run multiple instances of the same event flow which enables multiple consumers.

Follow these steps to run this sample:

  1. In the Project Explorer view, open the sample you just loaded.

    If you see red marks on a project folder, wait a moment for the project to load its features.

    If the red marks do not resolve themselves after a minute, select the project, right-click, and select Maven>Update Project from the context menu.

  2. Open the src/main/eventflow/packageName folder.

  3. Open the WorkQueues.sbapp file and click the Run button. This opens the SB Test/Debug perspective and starts the module.

  4. In the Manual Input view, select the ProducerIn input stream.

    The message field is a list of strings. Add one or two strings to the list (each string is meant to simulate one second of consumer work time).

    Click Send Data.

  5. In the Output Streams view, examine the output and see that the message you entered is now output to the ConsumerData output stream.

    Also notice the ConsumerAckStatus shows that a successful acknowledgment of the message was sent after the data was processed.

  6. When done, press F9 or click the Terminate EventFlow Fragment button.

Running The RabbitMQ Publish/Subscribe Sample in StreamBase Studio

This sample demonstrates how to implement the Publish/Subscribe Tutorial from the RabbitMQ website. This sample shows how to send a message to multiple consumers.

Follow these steps to run this sample:

  1. Continuing in the same sample project, open the PublishSubscribe.sbapp file and click the Run button. This opens the SB Test/Debug perspective and starts the module.

  2. In the Manual Input view, select the ProducerIn input stream.

    Enter some text into the message field.

    Click Send Data.

  3. In the Output Streams view, examine the output and see that the message you entered is now output to the Consumer1Data and Consumer2Data output streams, showing that each consumer received the message.

  4. When done, press F9 or click the Terminate EventFlow Fragment button.

Running the RabbitMQ Routing Sample in StreamBase Studio

This sample demonstrates how to implement the Routing Tutorial from the RabbitMQ website.

This sample shows how to subscribe to only to a subset of the messages. The sample shows how to direct messages to a specific subset of consumers.

Follow these steps to run this sample:

  1. Continuing in the same sample project, open the Routing.sbapp file and click the Run button. This opens the SB Test/Debug perspective and starts the module.

  2. In the Manual Input view, select the ProducerIn input stream.

    Enter some text into the message field.

    Enter error into the routingKey field.

    Click Send Data.

  3. In the Output Streams view, examine the output and see that the message you entered is now output via the ErrorConsumerData.

  4. In the Manual Input view, select the ProducerIn input stream.

    Enter some text into the message field.

    Enter debug into the routingKey field.

    Click Send Data.

  5. In the Output Streams view, examine the output and see that the message you entered is now output via the DebugConsumerData.

  6. When done, press F9 or click the Terminate EventFlow Fragment button.

Running the RabbitMQ Topics Sample in StreamBase Studio

This sample demonstrates how to implement the Topics Tutorial from the RabbitMQ website.

This sample shows how to send messages based on topics. Messages sent to a topic exchange cannot have an arbitrary route — it must be a list of words, delimited by dots. The words can be anything, but usually they specify some features connected to the message.

In this sample, notice there are four different consumers: two consumers, CriticalTopicsConsumer and KernTopicsConsumer, subscribe to a single specific topic end point while MultipleTopicsConsumer subscribes to multiple, and AllTopicsConsumer will display all messages by subscribing to #.

The steps to run this sample in Studio are as follows:

  1. Continuing in the same sample project, open the Topics.sbapp file and click the Run button. This opens the SB Test/Debug perspective and starts the module.

  2. In the Manual Input view, select the ProducerIn input stream.

    Enter some text into the message field.

    Enter kern.debug into the routingKey field.

    Click Send Data.

  3. In the Output Streams view, examine the output and see that the message you entered is now output via MultipleTopicsConsumer MultipleTopicsConsumer, AllTopicsConsumer, and KernTopicsConsumer.

  4. In the Manual Input view, select the ProducerIn input stream.

    Enter some text into the message field.

    Enter system.critical into the routingKey field.

    Click Send Data.

  5. In the Output Streams view, examine the output and see that the message you have entered has now been output via the MultipleTopicsConsumer, AllTopicsConsumer, and CriticalTopicsConsumer.

  6. When done, press F9 or click the Terminate EventFlow Fragment button.

Running the RabbitMQ Remote Procedure Call (RPC) Sample in StreamBase Studio

This sample demonstrates how to implement the RPC Tutorial from the RabbitMQ website.

This sample shows how to send a message from the client to the server. The server then processes the message performing an operation (in this samples case squaring the number provided) and returning the result.

The steps to run this sample in Studio are as follows:

  1. Continuing in the same sample project, open the RPC.sbapp file and click the Run button. This opens the SB Test/Debug perspective and starts the module.

  2. In the Manual Input view, select the ClientCall input stream.

    Enter an integer value (for example, 8) into the message field.

    Click Send Data.

  3. In the Output Streams view, examine the output of the ClientConsumeData stream. Its message is the square number of the one you entered.

  4. When done, press F9 or click the Terminate EventFlow Fragment button.

Running the RabbitMQ CustomSerializer Sample in StreamBase Studio

This sample demonstrates how to implement custom serialization of the message data. The sample demonstrates this using a tuple message type and converts the tuple into a JSON value at the producer side to send to the server and then converts that JSON value back into the tuple on the consumer side.

The source files that implement the custom serialization are CustomDeserializer.java and CustomSerializer.java, which are located under the src/main/java/packageName folder.

The steps to run this sample in Studio are as follows:

  1. Continuing in the same sample project, open the CustomSerializer.sbapp file and click the Run button. This opens the SB Test/Debug perspective and starts the module.

  2. In the Manual Input view, select the ProducerIn input stream.

    Enter some values into the message.Field1 and message.Field2 fields.

    Click Send Data.

  3. In the Output Streams view, examine the output and see that the message you entered is now output to the ConsumerData output stream, showing that it was properly serialized.

  4. When done, press F9 or click the Terminate EventFlow Fragment button.

Running The RabbitMQ Ack and Nack Sample in StreamBase Studio

This sample demonstrates how messages can be acknowledged instead of auto-acknowledged. It also demonstrates how a negative acknowledgment works.

The sample is set up so that every second message that is sent to the Consumer2 will be negative acknowledged and sent back to the server to be requeued and picked up by another consumer, which in this sample can only be Consumer1.

The steps to run this sample in Studio are as follows:

  1. Continuing in the same sample project, open the SampleAckAndNack.sbapp file and click the Run button. This opens the SB Test/Debug perspective and starts the module.

  2. In the Manual Input view, select the ProducerIn input stream.

    Enter some text into the message field.

    Click Send Data.

  3. In the Output Streams view, examine the output and see that the message you entered is now output via the Consumer1Out output stream.

  4. In the Manual Input view, select the ProducerIn input stream.

    Enter some text into the message field.

    Click Send Data.

  5. In the Output Streams view, examine the output and see that the message you entered is now output via the Consumer2Out output stream.

    In this instance, notice that the Consumer2NackStatus shows that a Nack was sent back to the server.

    You should now see that Consumer1Out received the message; also examine its envelope.isRedliver field and notice its value is true which means this message was previously delivered but not acknowledged.

  6. When done, press F9 or click the Terminate EventFlow Fragment button.

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 permission problems. The default workspace location for this sample is:

studio-workspace/sample_adapter_embedded_RabbitMQ

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