31170  envelopes
Published: 13 May 2014

As lead technologist at Sagittarius Marketing, one of my many roles is to investigate new technologies. Sometimes I hear about new things through a vast array of websites, news feeds and emails I receive. This time I discovered it like many great inventions completely by accident.

I was looking in to a system known as node.js and how to get it to talk to Microsoft .NET. While researching this, I came across a system called RabbitMQ. I'm excited about it, because it allows different pieces of software to talk using a common language.

One of the biggest technology challenges an agency or client faces, is getting their disparate systems to talk to one another. This is commonly overcome using data export/import to migrate data. Emails sent in a defined format to update some third party software. Web services using json or xml to update or read information across different platforms.

RabbitMQ is another solution to this problem, it allows any system to send messages to each other. These messages use a common specification called AMQP or Advanced Message Queuing Protocol

Each piece of software plugging in to RabbitMQ doesn't need to be written in the same coding language. They don't even need to be running on the same infrastructure. 

They can talk to each other in a number of ways including

  1. Publish-Subscriber – Any message you send gets delivered to all the recipients
  2. Queue – Messages are delivered to any available unit for processing. So if you had a bunch of small jobs they can be handed out to multiple workers.
  3. Two pieces of software sharing simple messages
  4. Routing - Selectively route messages to a given destination(s)
  5. Topics - Destinations receive messages based on a patten. So one destination gets messages about pears and another gets messages about apples.
  6. RPC - call a particular command or procedure on a remote computer

Or even use a combination of all of the above.

We see a lot of new technologies come and go, the difficult thing is choosing the right tool for the job. So whenever I see a new system like RabbitMQ in the back of my mind I'm thinking thats great but...

  1. Does it really help our customers in the real world
  2. What's the chances of it going down in the middle of the night on a bank holiday weekend

I feel pretty comfortable on both accounts as I can see it is used in the real world by enterprise level companies.

One such company is http://www.15below.com/ based in Brighton, UK. They have a pretty impressive client base including Qantas, Thomas Cook and Ryan Air.

In their words they allow their clients to 

–  Connect with each passenger from when they book until after they get home

–  Delight passengers with personalised information to smooth their journeys

–  Calmly handle the chaos of unexpected situations from hurricanes to strikes

They use RabbitMQ to power their system:

"15Below's Flight-Status product provides real-time flight information to passengers and their family and friends. We interface with the airline's real-time flight information stream generated from their operation systems and provide a platform that allows them to apply complex business logic to this stream. We render customer tailored output, and communicate with the airline's customers via a range of channels, including email, SMS, voice and iPhone/Android push. RabbitMQ allows us to build each piece; the client for the fight information stream, the message renderer, the sink channels and the business logic; as separate components that communicate using structured messages." - Mike Hadlow, Chief Architect at 15Below.

Fascinating to see something like this used in the real world and I can't wait to leverage it for our clients in the near future.


Best Wishes, Richard
Lead Server-Side Developer


Richard Brisley

Drum Recommends 2020   Wirehive_Partner     rar   SagittariusAgency  PoweredbySitecoreGooglePartnerFooter

Page Name: {% PageName %}

Page Template: {% PageTemplate %}

CampaignID: {% AgentReferrer.ID %}

CampaignName: {% AgentReferrer.Name %}

CampaignPhone: {% AgentReferrer.Phone %}

Item Location: {% PageLocation %}

Search Session Exists: False