Upload
coldfusionconference
View
314
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
Decouple & Scale with Enterprise Messaging
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, etc • 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 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