CloudAMQP provides managed RabbitMQ clusters on the cloud. It is quite popular, so it was only a matter of time before I got the question - How can I use OIC to integrate with RabbitMQ. Never one to dodge a challenge, I began by subscribing to the free version of RabbitMQ - Little Lemur.
Setting up the CloudAMQP account and RabbitMQ itself is very simple, I just needed to note the following details from the setup screens - the User, vHost and Password provided. I will need these later on when constructing the REST requests to RabbitMQ in Postman.
From the CloudAMQP homepage - I click on the RabbitMQ Manager button to create my Queue - I provide a name - NiallCQueue - and just accept all the default settings.
A very simple task - my Queue is set up, now to the api docs to check out how to write to and read from the queue -
Next step is Postman, to try out the RabbitMQ apis - I begin with the most simple request - to retrieve the queue information -
I copy the relevant curl command from the RabbitMQ api docs and paste into Postman -
Note that the first part of the url is user:password. You can get rid of this by setting up Basic Authorization with the same user/password in Postman.
Next request is to put a message on the queue -
Here I use Basic Auth, so no username/password in the url.
Let's look at the payload -
routing_key - set to the name of the queue
payload - yes, the payload I want to write to the queue
payload_encoding - I left this as "string".
From the docs - The payload_encoding key should be either "string" (in which case the payload will be taken to be the UTF-8 encoding of the payload field) or "base64" (in which case the payload field is taken to be base64 encoded).
properties - I left empty, to begin with.
The routed = true response tells me the message has been successfully sent to at least one queue.
Next api is the GET -
Note the request payload -
count - the max number of messages to retrieve from the queue.
encoding - set to auto
from the docs - encoding must be either "auto" (in which case the payload will be returned as a string if it is valid UTF-8, and base64 encoded otherwise), or "base64" (in which case the payload will always be base64 encoded).
ackmode - ack_requeue_false
from the docs - ackmode determines whether the messages will be removed from the queue. If ackmode is ack_requeue_true or reject_requeue_true they will be requeued - if ackmode is ack_requeue_false or reject_requeue_false they will be removed.
All is working in Postman, so now on to OIC -
Step 1 - Create the Connection
Here we use the OIC REST adapter -
Step 2 - Create a Scheduled Integration
Here is the configuration of the REST invoke -
I use the request and response payloads from my Postman test as the request and response JSON samples.
The For-Each configuration -
The Logger action just logs the payload -
Now to testing the integration - for this I have put 6 messages in the queue -
I run the integration and check out the activity stream -
I check out one of the log actions -
No comments:
Post a Comment