RabbitMQ: Messaging in the Cloud

Similar documents
Exploring the scalability of RPC with oslo.messaging

MOM MESSAGE ORIENTED MIDDLEWARE OVERVIEW OF MESSAGE ORIENTED MIDDLEWARE TECHNOLOGIES AND CONCEPTS. MOM Message Oriented Middleware

Which application/messaging protocol is right for me?

Microservices, Messaging and Science Gateways. Review microservices for science gateways and then discuss messaging systems.

AMQP and Beyond. Messaging by Extending RabbitMQ. Tony Garnock-Jones

CLUSTERING HIVEMQ. Building highly available, horizontally scalable MQTT Broker Clusters

in Action RabbitMQ Distributed Messaging for Everyone ALVARO VIDELA JASON J.W. WILLIAMS /II MANNING Shelter Island

October 23, CERN, Switzerland. BOINC Virtual Machine Controller Infrastructure. David García Quintas. Introduction. Development (ie, How?

Virtual Memory. Chapter 8

Introduction to AMQP Business messaging without lock-in

Solace JMS Broker Delivers Highest Throughput for Persistent and Non-Persistent Delivery

Indirect Communication

RabbitMQ Overview. Tony Garnock-Jones

Red Hat Summit 2009 Jonathan Robie

Reference Architecture. vrealize Automation 7.0

Time and Space. Indirect communication. Time and space uncoupling. indirect communication

SHORT NOTES / INTEGRATION AND MESSAGING

Threads and Too Much Milk! CS439: Principles of Computer Systems February 6, 2019

PHP Composer 9 Benefits of Using a Binary Repository Manager

How to Route Internet Traffic between A Mobile Application and IoT Device?

Design and Architecture. Derek Collison

9 Reasons To Use a Binary Repository for Front-End Development with Bower

RabbitMQ Sentimental reports from the Erlang frontline

Datacenter replication solution with quasardb

Reference Architecture

Building loosely coupled and scalable systems using Event-Driven Architecture. Jonas Bonér Patrik Nordwall Andreas Källberg

Scaling DreamFactory

Broker Clusters. Cluster Models

Beyond 1001 Dedicated Data Service Instances

How To Construct A Keyword Strategy?

CS 162 Operating Systems and Systems Programming Professor: Anthony D. Joseph Spring Lecture 21: Network Protocols (and 2 Phase Commit)

CS 4226: Internet Architecture

Lecture 21 11/27/2017 Next Lecture: Quiz review & project meetings Streaming & Apache Kafka

CPSC 426/526. Cloud Computing. Ennan Zhai. Computer Science Department Yale University

FileWave 10 Webinar Q&A

HYBRID TRANSACTION/ANALYTICAL PROCESSING COLIN MACNAUGHTON

REVIEW: A LOOK AT A PORTABLE USB3 NETWORK TAP WIRESHARK HEROES SERIES VISIT

Data Acquisition. The reference Big Data stack

JetBrains TeamCity Comparison

A Distributed System Case Study: Apache Kafka. High throughput messaging for diverse consumers

Scaling Web Apps With RabbitMQ

MQ High Availability and Disaster Recovery Implementation scenarios

Create High Performance, Massively Scalable Messaging Solutions with Apache ActiveBlaze

BRKDCT-1253: Introduction to OpenStack Daneyon Hansen, Software Engineer

IEMS 5722 Mobile Network Programming and Distributed Server Architecture

CSCI Computer Networks

Planning Resources. vrealize Automation 7.1

OPENSTACK: THE OPEN CLOUD

Producer sends messages to the "hello" queue. The consumer receives messages from that queue.

SCALE AND SECURE MOBILE / IOT MQTT TRAFFIC

Comp 310 Computer Systems and Organization

Threads and Too Much Milk! CS439: Principles of Computer Systems January 31, 2018

IERG 4080 Building Scalable Internet-based Services

Message Queueing. 20 March 2015

SOFTWARE UNIT 1 PART B C O M P U T E R T E C H N O L O G Y ( S 1 O B J A N D O B J 3-2)

MySQL and Virtualization Guide

AWS Solution Architecture Patterns

15 Minute Traffic Formula. Contents HOW TO GET MORE TRAFFIC IN 15 MINUTES WITH SEO... 3

BUILDING MICROSERVICES ON AZURE. ~ Vaibhav

COP Cloud Computing. Presented by: Sanketh Beerabbi University of Central Florida

Introduction to Operating Systems Prof. Chester Rebeiro Department of Computer Science and Engineering Indian Institute of Technology, Madras

Redis as a Reliable Work Queue. Percona University

White Paper How IP is impacting Physical Access Control

Last Class: CPU Scheduling! Adjusting Priorities in MLFQ!

Introduction to Operating Systems Prof. Chester Rebeiro Department of Computer Science and Engineering Indian Institute of Technology, Madras

CPS 310 midterm exam #1, 2/19/2016

Basic Reliable Transport Protocols

SOFTWARE-DEFINED NETWORKING WHAT IT IS, AND WHY IT MATTERS

NewSQL Without Compromise

Monitoring a spacecraft from your smartphone using MQTT with Joram

Event Streams using Apache Kafka

CPS 310 second midterm exam, 11/14/2014

SAS Event Stream Processing 5.1: Advanced Topics

Database Architectures

Services: Monitoring and Logging. 9/16/2018 IST346: Info Tech Management & Administration 1

Making Session Stores More Intelligent KYLE J. DAVIS TECHNICAL MARKETING MANAGER REDIS LABS

MongooseIM - Messaging that Scales

Server and IT Management Software that Offers You Complete Control and Total Flexibility.

High Performance Computer Architecture Prof. Ajit Pal Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur

Identifying Workloads for the Cloud

WHITE PAPER. AirGap. The Technology That Makes Isla a Powerful Web Malware Isolation System

Facilitating the Open Source Community Transition to Cloud Storage Giorgio Regni & Brad King

Case Study Virtual Expo. Virtual Expo, a leader in online B2B exhibitions, used Varnish Plus Cloud to build and enhance their own in-house CDN

Switch or Broker? A comparison of two models for Reliable Messaging. by Pieter Hintjens, imatix Corporation. January, 2006

UNIT:2. Process Management

Performance and Scalability with Griddable.io

Stanford University Computer Science Department CS 240 Quiz 1 Spring May 6, total

Real World Messaging With Apache ActiveMQ. Bruce Snyder 7 Nov 2008 New Orleans, Louisiana

Lecture 1: January 22

DISTRIBUTED SYSTEMS Principles and Paradigms Second Edition ANDREW S. TANENBAUM MAARTEN VAN STEEN. Chapter 1. Introduction

BUILDING A SCALABLE MOBILE GAME BACKEND IN ELIXIR. Petri Kero CTO / Ministry of Games

Building a Real-time Notification System

AppDefense Getting Started. VMware AppDefense

Operating Systems Overview

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions

Pregel: A System for Large- Scale Graph Processing. Written by G. Malewicz et al. at SIGMOD 2010 Presented by Chris Bunch Tuesday, October 12, 2010

Application of Virtualization Technologies & CernVM. Benedikt Hegner CERN

Native POSIX Thread Library (NPTL) CSE 506 Don Porter

Oracle Solaris 11: No-Compromise Virtualization

Red Hat Enterprise MRG 3 Messaging Programming Reference

Transcription:

ADD-01 RabbitMQ: Messaging in the Cloud Matthew Sackman matthew@rabbitmq.com

INTRODUCTION AND PLAN COMING UP IN THE NEXT HOUR...

INTRODUCTION AND PLAN COMING UP IN THE NEXT HOUR... Messaging, messaging, messaging: What does it all mean?

INTRODUCTION AND PLAN COMING UP IN THE NEXT HOUR... Messaging, messaging, messaging: What does it all mean? What is this angular mutant orange Rabbit thing, and why is it dropping AMQP all over the carpet?

INTRODUCTION AND PLAN COMING UP IN THE NEXT HOUR... Messaging, messaging, messaging: What does it all mean? What is this angular mutant orange Rabbit thing, and why is it dropping AMQP all over the carpet? How many balloons does it take to keep a Rabbit in a cloud?

INTRODUCTION AND PLAN COMING UP IN THE NEXT HOUR... Messaging, messaging, messaging: What does it all mean? What is this angular mutant orange Rabbit thing, and why is it dropping AMQP all over the carpet? How many balloons does it take to keep a Rabbit in a cloud? Prizes! Prizes! Prizes!

WHY DO YOU CARE? MESSAGING IS BECOMING EVER MORE IMPORTANT BECAUSE: Scalability issues demand greater flexibility from application developers Traditional synchronous programming models fair poorly at large scale Cloud computing permits greater dynamic scaling than ever seen before, but applications need to be written well to take advantage of this Messaging enables scaling by decoupling components and adding flexibility

RABBITMQ IN THE CLOUD TURNS OUT RABBITS QUITE ENJOY HELIUM Several cloud infrastructures have been built using RabbitMQ as the nervous system of the cloud RabbitMQ is easily installed and used by clients on existing clouds such as Amazon EC2 RabbitMQ is available as an additional component on Heroku RabbitMQ is going to become available in more clouds in the future, e.g. Social, Nebula, VMforce RabbitMQ is just as easy to use to solve problems in clouds as it is to solve problems on the ground

WHAT IS MESSAGING? What is Messaging?

WHAT IS MESSAGING? What is Messaging? What is a Banana?

WHAT IS MESSAGING? What can I use Messaging for?

WHAT IS MESSAGING? What can I use Messaging for? What can I use a Banana for?

WHAT IS MESSAGING? What can I use a Messaging protocol for?

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Decoupling Producer Consumer

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Decoupling Producer Consumer E.g. website passing orders to a credit-card charging engine

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Bidirectional Decoupling Caller Callee

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Bidirectional Decoupling Caller Callee E.g. remote procedure call

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Pipelining and Decoupling Producer Consumer Producer Consumer

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Pipelining and Decoupling Producer Consumer Producer Consumer E.g. combining messages with records in a database

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Pipelining and Decoupling Producer Consumer Producer Consumer E.g. combining messages with records in a database

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Pipelining and Decoupling Producer Consumer Producer Consumer E.g. combining messages with records in a database

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Work-distribution and Decoupling Producer Consumer Consumer

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Work-distribution and Decoupling Consumer Producer Consumer Both duplication and round-robin.

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Work-distribution and Decoupling Producer Consumer Consumer Both duplication and round-robin. Duplication can be used for logging messages at certain points in the system. Round-robin can be used for horizontal scaling.

USE CASES FOR MESSAGING PROTOCOLS IT S GOT TO BE GOOD FOR SOMETHING, RIGHT? Work aggregation, distribution and Decoupling Producer Consumer Producer Consumer

USE CASES FOR MESSAGING PROTOCOLS THINGS I CAN T DRAW PICTURES OF OTHER THINGS MESSAGE BROKERS CAN TYPICALLY DO Store-and-forward of messages Absorbing spikes of activity (again, decoupling) Routing to different consumers based on message properties

USE CASES FOR MESSAGING PROTOCOLS THINGS I CAN T DRAW PICTURES OF OTHER THINGS MESSAGE BROKERS CAN TYPICALLY DO Store-and-forward of messages Absorbing spikes of activity (again, decoupling) Routing to different consumers based on message properties GENERAL CONCLUSION Messaging protocols as a means of decoupling events is an extremely common and pervasive task There is an enormous range of applications and problems to which using a messaging protocol is an effective solution

AMQP AMQP: Advanced Message Queueing Protocol

WHY AMQP? IT S CALLED Advanced, SO IT MUST BE GOOD! AMQP IS ESPECIALLY NICE BECAUSE... All resources are dynamically created and destroyed by clients as they need them no static preconfiguration A clean and simple model: just three key nouns to learn Open standard, developed by the AMQP Working Group (we re members) Lots of client libraries available in many languages, for free

WHY AMQP? IT S CALLED Advanced, SO IT MUST BE GOOD! AMQP IS ESPECIALLY NICE BECAUSE... All resources are dynamically created and destroyed by clients as they need them no static preconfiguration A clean and simple model: just three key nouns to learn Open standard, developed by the AMQP Working Group (we re members) Lots of client libraries available in many languages, for free An excellent, freely available, open source broker implementation, called RabbitMQ...

AMQP 101 ADVANCED!= COMPLICATED Create an exchange,... X "my_exchange" type = fanout

AMQP 101 ADVANCED!= COMPLICATED... create a queue,... X "my_exchange" type = fanout "my_queue"

AMQP 101 ADVANCED!= COMPLICATED... add a binding,... X "my_exchange" type = fanout "my_queue"

AMQP 101 ADVANCED!= COMPLICATED... all inside a broker. X "my_exchange" type = fanout "my_queue"

AMQP 101 ADVANCED!= COMPLICATED Publish a message,... msg X "my_exchange" type = fanout "my_queue"

AMQP 101 ADVANCED!= COMPLICATED... it sits in a queue. X "my_exchange" type = fanout msg "my_queue"

AMQP 101 ADVANCED!= COMPLICATED Publish another message,... msg 2 X "my_exchange" type = fanout msg "my_queue"

AMQP 101 ADVANCED!= COMPLICATED... it also goes to the queue. X "my_exchange" type = fanout msg 2 msg "my_queue"

AMQP 101 ADVANCED!= COMPLICATED Consuming from the queue retrieves the messages in order. X "my_exchange" type = fanout msg 2 msg "my_queue"

AMQP 101 ADVANCED!= COMPLICATED Consuming from the queue retrieves the messages in order. X "my_exchange" type = fanout msg 2 "my_queue" msg

AMQP 101 ADVANCED!= COMPLICATED Consuming from the queue retrieves the messages in order. X "my_exchange" type = fanout "my_queue" msg 2

AMQP 101 ADVANCED!= COMPLICATED Publish many messages,... F E D C B A X "my_exchange" type = fanout "my_queue"

AMQP 101 ADVANCED!= COMPLICATED... and they are distributed amongst several consumers on the same queue. D A X E B "my_exchange" type = fanout "my_queue" F C

AMQP 101 ADVANCED!= COMPLICATED We can create a second queue and bind it to the same exchange. X "my_exchange" type = fanout "my_queue_2" "my_queue"

AMQP 101 ADVANCED!= COMPLICATED Messages go to every queue bound to a fanout exchange... C B A X "my_queue_2" "my_exchange" type = fanout "my_queue"

AMQP 101 ADVANCED!= COMPLICATED Messages go to every queue bound to a fanout exchange... X "my_exchange" type = fanout C C B B A "my_queue_2" A "my_queue"

AMQP 101 ADVANCED!= COMPLICATED queues can be consumed from at different rates.... and the X "my_exchange" type = fanout C B C "my_queue_2" A "my_queue" B A

AMQP 101 ADVANCED!= COMPLICATED queues can be consumed from at different rates.... and the X "my_exchange" type = fanout C "my_queue_2" "my_queue" C A B

AMQP 101 ADVANCED!= COMPLICATED queues can be consumed from at different rates.... and the X "my_exchange" type = fanout "my_queue_2" "my_queue" C

AMQP 101 ADVANCED!= COMPLICATED We replace my_exchange with a direct exchange. X "my_exchange" type = direct bk = "vodka" bk = "beer" "my_queue_2" "my_queue" rk: Routing Key bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED The routing key of a published message selects which queues the message goes to. A rk = "vodka" X "my_exchange" type = direct bk = "vodka" bk = "beer" "my_queue_2" "my_queue" rk: Routing Key bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED The routing key of a published message selects which queues the message goes to. B rk = "beer" X "my_exchange" type = direct bk = "vodka" bk = "beer" A "my_queue_2" "my_queue" rk: Routing Key bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED The routing key of a published message selects which queues the message goes to. X "my_exchange" type = direct bk = "vodka" bk = "beer" A "my_queue_2" B "my_queue" rk: Routing Key bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Messages with no matching bindings are discarded. C rk = "tequila" X "my_exchange" type = direct bk = "vodka" bk = "beer" A "my_queue_2" B "my_queue" rk: Routing Key bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Messages with no matching bindings are discarded. X "my_exchange" type = direct bk = "vodka" bk = "beer" A "my_queue_2" B "my_queue" rk: Routing Key bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. X bk = "a.*.c" "my_exchange" type = topic bk = "#.e" "my_queue_2" "my_queue" rk: Routing Key bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. X bk = "a.*.c" "my_exchange" type = topic bk = "#.e" "my_queue_2" "my_queue" rk: Routing Key bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. A B C D E F rk = "a" rk = "a.c" rk = "a.b.c" rk = "a.e" rk = "b.e" rk = "e" X bk = "a.*.c" "my_exchange" type = topic rk: Routing Key bk = "#.e" "my_queue_2" "my_queue" bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. A B C D E F rk = "a" rk = "a.c" rk = "a.b.c" rk = "a.e" rk = "b.e" rk = "e" X bk = "a.*.c" "my_exchange" type = topic rk: Routing Key bk = "#.e" "my_queue_2" "my_queue" bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. B C D E F rk = "a.c" rk = "a.b.c" rk = "a.e" rk = "b.e" rk = "e" X bk = "a.*.c" "my_exchange" type = topic rk: Routing Key bk = "#.e" "my_queue_2" "my_queue" bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. B C D E F rk = "a.c" rk = "a.b.c" rk = "a.e" rk = "b.e" rk = "e" X bk = "a.*.c" "my_exchange" type = topic rk: Routing Key bk = "#.e" "my_queue_2" "my_queue" bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. C D E F rk = "a.b.c" rk = "a.e" rk = "b.e" rk = "e" X bk = "a.*.c" "my_exchange" type = topic rk: Routing Key bk = "#.e" "my_queue_2" "my_queue" bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. D E F rk = "a.e" rk = "b.e" rk = "e" X bk = "a.*.c" "my_exchange" type = topic rk: Routing Key bk = "#.e" C "my_queue_2" "my_queue" bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. E F rk = "b.e" rk = "e" X bk = "a.*.c" "my_exchange" type = topic rk: Routing Key bk = "#.e" C "my_queue_2" D "my_queue" bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. F rk = "e" X "my_exchange" type = topic rk: Routing Key bk = "a.*.c" bk = "#.e" E C "my_queue_2" D "my_queue" bk: Binding Key

AMQP 101 ADVANCED!= COMPLICATED Topic exchanges permit wildcards in the binding key. Keys are.-separated lists, e.g. stocks.nyse.vmw * matches any 1 element. # matches zero or more elements. X bk = "a.*.c" "my_exchange" type = topic bk = "#.e" F E C "my_queue_2" D "my_queue" rk: Routing Key bk: Binding Key

OTHER KEY ELEMENTS OF AMQP YES, IT DOES ALL THE STANDARD BORING STUFF TOO Errors can be raised for messages that do not get routed to any queues Messages can be consumed so that the broker does not forget about the message until the client explicitly acknowledges the message Messages can be published with a property indicating whether the message should be written to disk Transactions: making publication and acknowledgement of several messages atomic Flow control: e.g. used to stop publishers from overwhelming the broker in extreme situations

CONCLUSION: WHY AMQP? IT S CALLED Advanced, SO IT MUST BE GOOD! AN OPEN Protocol IS A GOOD THING BECAUSE IT... Makes it easier to have multiple implementations that interoperate at the wire-level Avoids vendor lock-in: easy to rip out and replace individual components with alternative implementations Allows third-parties to write client libraries for other languages Decouples flag-day upgrades for both client libraries and broker Allows third-party traffic analysis tools to inspect and decode interactions between the clients and brokers Promotes similarities in APIs presented by different client libraries

RABBITMQ

INTRODUCING RABBITMQ NOT ACTUALLY A RABBIT RABBITMQ, AMQP & MESSAGING RabbitMQ consists of the broker (server) and several clients (Java,.Net, plus others) They speak the AMQP protocol to each other Anyone can write (and many have) other clients which also speak AMQP and work with RabbitMQ

INTRODUCING RABBITMQ NOT ACTUALLY A RABBIT RABBITMQ, AMQP & MESSAGING RabbitMQ consists of the broker (server) and several clients (Java,.Net, plus others) They speak the AMQP protocol to each other Anyone can write (and many have) other clients which also speak AMQP and work with RabbitMQ RabbitMQ is freely available and open source, licensed under the Mozilla Public License v1.1 It s already in many popular Linux distributions (Ubuntu, Debian, Fedora, Gentoo) and can be easily installed on OS X both through MacPorts and Homebrew

INTRODUCING RABBITMQ NOT ACTUALLY A RABBIT The broker is written in Erlang: an excellent programming language and platform for the task A mere 17k lines of code in the broker Supports clustering for increased scalability Supports several extension points via plugins which are frequently used to extend RabbitMQ, e.g. STOMP, XMPP adaptors; The Shovel; additional exchange types... Can work with Pacemaker and associated tools to provide various forms of High Availability

RABBITMQ FEATURES A single queue can run up around 30,000 messages per second, depending on payload, clients, and properties of the messages But several queues together can achieve much higher throughput, and still keep the queues empty RabbitMQ 2.0 gains the ability to send messages to disk to free up memory, thus allowing queue depths to grow, bounded only by disk space, not RAM. Queues of 10s of millions of items are easily accommodated Adding extension to RabbitMQ based on feedback from our users, e.g. queue expiry, queue-message TTL, publisher acknowledgements

CONCLUSIONS RabbitMQ is a leading implementation of AMQP, and has wide adoption from a large community across a large number of languages and problem domains Website and downloads available at http://www.rabbitmq.com/ On Ubuntu and Debian, just an apt-get install rabbitmq-server away. Similarly easy for Fedora and many other Linux distributions For OS X, it s in MacPorts Full easy-to-install Windows bundles available from the website

AND FINALLY... CAN I HAVE A PONY TOO? All our messages are incredibly important and must never ever be lost under any circumstances.

AND FINALLY... CAN I HAVE A PONY TOO? All our messages are incredibly important and must never ever be lost under any circumstances. Fact: There are always moments at which the message is at a single point of failure.

AND FINALLY... CAN I HAVE A PONY TOO? We need guaranteed exactly-once delivery I want to send 1 message, and know it gets delivered to exactly one consumer, once.

AND FINALLY... CAN I HAVE A PONY TOO? We need guaranteed exactly-once delivery I want to send 1 message, and know it gets delivered to exactly one consumer, once. Fact: Provably impossible. Depends on definition of guarantee: you can achieve a high probability of no duplicates and no message loss.

THE END WAKE UP! Thank you Questions?