CBDW2014 - Down the RabbitMQ hole with ColdFusion

Post on 20-Jun-2015

297 views 1 download

Tags:

description

In this talk I will introduce attendees to the basics of messaging queues, their goals and applications from CFML. Messaging enables software applications to connect and scale. Thus, providing applications to connect to each other as components of a larger application, or to user devices and data. Messaging is asynchronous, and can decouple your software concerns with ease. However, messaging is much more than the traditional publish/subscribe patterns but also the ability to create work queues, routing and much more.

transcript

Down the RabittMQ Hole with ColdFusion

WHO AM I?• Luis Majano - Computer Engineer

• Born in El Salvador ------------------>

• Architecture + Software Design

• CEO of Ortus Solutions

• Manager of the IECFUG (www.iecfug.com)

• Adobe Community Professional

• Creator of all things Box: ColdBox, ContentBox, WireBox....

AGENDA

• RPC Calls • What is Messaging • Implementations • AMQP Protocol • RabbitMQ • Nice Demo

RPC STYLE CALLS

CFC CFC

CFC

• Blocks Request Usage • Even if you do them Asynchronous, messages only 1 receiver • Sender always knows about receiver • Receiver knows about sender • How can we decouple knowledge? • How can we apply messaging patterns to our apps?

PROBLEMS WITH RPC

Messaging (EMS)Producer

Consumer Consumer Consumer

Messaging Bus

Can be any system or

language

Can be any system or

language

Doesn’t care about consumers

AsynchronousDoes not get a

response

• Producers don’t care about consumers -> Decouple • Cross platforms-technologies-OS, you name it -> Flexibility • Event Driven Programming -> Scalability • Queueing for later delivery • Asynchronous • Load balancing • Hulkyfied services

BENEFITS OF MESSAGING

Usages and Patterns

Work QueuesMessaging

Publish/Subscribe Topics/Routing

Protocols

JMS AMQP STOMP

AMQP - www.amqp.org

• Advanced Message Queuing Protocol • != JMS • Standard binary protocol • Exchanges • Queuing • Routing • Reliable • Secure • Several Implementations

RabbitMQ

ActiveMQ

Qpid

StormMQ

• AMQP Messaging Broker • www.rabbitmq.com • Built on erlang like Couchbase NoSQL • Extremely fast, reliable and secure • Languages: c#, erlang, java, python, ruby, node, cfml • Simple concept

• Accepts and forwards messages • Its like a post box, post office and postman

HOW IT WORKS?Producer

Message (Body+Routing Key)

Exchange (Bindings via Routing Key)

Body = binary, json, anything

stock.prices

stock.run

log.error cluster

Queues are bound to exchanges with patterns

Routing key = Bindings

Queues

• Direct

• Routing key = queue name • No mapping or extra fluff just a passthrough • Similar to JMS

• Topic

• Binding pattern (routing key) is match against the queue name • Not full regex • Ex: log.*, log# • Not like JMS Topics, forget JMS, this is not JMS

• Fanout + More

EXCHANGE TYPES

LOAD BALANCING + ACK

Worker Queue

Consumer

Consumer

Consumer

Messages are round-robin

to each consumer

Consumer need to ack

PUB-SUB EXAMPLE

DEMO TIME

• Java Producer • Java Consumer • CFML Consumer • NodeJS Consumer • JavaScript + Stomp Consumer • CFML Producer

Q & A

• RabbitMQ In Action Book • http://www.rabbitmq.com • http://tryrabbitmq.com/ • https://github.com/RabbitMQSimulator/RabbitMQSimulator • http://koo.fi/blog/2013/02/18/web-messaging-with-rabbitmq-web-stomp-and-

sockjs/ • https://github.com/robharrop/presentations.git