SlideShare a Scribd company logo
Dissecting the Rabbit:
RabbitMQ Internal Architecture
Alvaro Videla - RabbitMQ
Alvaro Videla
•
•
•
•
•

Developer Advocate at Pivotal / RabbitMQ!
Co-Author of RabbitMQ in Action!
Creator of the RabbitMQ Simulator!
Blogs about RabbitMQ Internals: http://videlalvaro.github.io/internals.html!
@old_sound | alvaro@rabbitmq.com

github.com/videlalvaro

About Me
Co-authored!
!

RabbitMQ in Action!
http://bit.ly/rabbitmq
Agenda
•

Intro to RabbitMQ

•

Dive into RabbitMQ Internals

•

A day in the life of a message

•

RabbitMQ message store

•

RabbitMQ behaviours and extensibility
What is RabbitMQ
RabbitMQ
RabbitMQ
RabbitMQ
• Multi Protocol Messaging Server
RabbitMQ
• Multi Protocol Messaging Server!
• Open Source (MPL)
RabbitMQ
• Multi Protocol Messaging Server!
• Open Source (MPL)!
• Polyglot
RabbitMQ
• Multi Protocol Messaging Server!
• Open Source (MPL)!
• Polyglot!
• Written in Erlang/OTP
Multi Protocol

http://bit.ly/rmq-protocols
Polyglot
Polyglot
Polyglot
• Java
Polyglot
• Java!
• node.js
Polyglot
• Java!
• node.js!
• Erlang
Polyglot
• Java!
• node.js!
• Erlang!
• PHP
Polyglot
• Java!
• node.js!
• Erlang!
• PHP!
• Ruby
Polyglot
• Java!
• node.js!
• Erlang!
• PHP!
• Ruby!
• .Net
Polyglot
• Java!
• node.js!
• Erlang!
• PHP!
• Ruby!
• .Net!
• Haskell
Polyglot

Even COBOL!!!11
Some users of RabbitMQ
Some users of RabbitMQ
•

Instagram
Some users of RabbitMQ
•
•

Instagram!
Indeed.com
Some users of RabbitMQ
•
•
•

Instagram!
Indeed.com!
MailboxApp
Some users of RabbitMQ
•
•
•
•

Instagram!
Indeed.com!
MailboxApp!
Mercado Libre
Some users of RabbitMQ
•
•
•
•
•

Instagram!
Indeed.com!
MailboxApp!
Mercado Libre!
NHS
Some users of RabbitMQ
•
•
•
•
•
•

Instagram!
Indeed.com!
MailboxApp!
Mercado Libre!
NHS!
Mozilla
http://www.rabbitmq.com/download.html

Unix - Mac - Windows
Messaging with RabbitMQ
A demo with the RabbitMQ Simulator

https://github.com/RabbitMQSimulator/RabbitMQSimulator
http://tryrabbitmq.com
RabbitMQ Simulator
RabbitMQ Internals
A day in the life of a message
A day in the life of a message
A day in the life of a message
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);!
$ch = $conn->channel();!
!

$ch->queue_declare($queue, false, true, false, false);!
!

$ch->exchange_declare($exchange, 'direct', false, true, false);!
!

$ch->queue_bind($queue, $exchange);!
!

$msg_body = implode(' ', array_slice($argv, 1));!
$msg = new AMQPMessage($msg_body, array('delivery_mode' => 2));!
!

$ch->basic_publish($msg, $exchange);
What happens here?

$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);!
$ch = $conn->channel();
What happens here?
Erlang
Erlang App
•

Processes (probably thousands)

•

They communicate sending messages

•

Each process has a message queue (don’t confuse with RabbitMQ queues)

•

Virtual Machine has preemptive scheduler
Read More Here:
http://jlouisramblings.blogspot.ru/2013/01/how-erlang-does-scheduling.html
Erlang code structure
•

Modules

•

Functions

•

Function Arity

•

Arguments

M, F, A = Module, Function, Arguments
rabbit_client_sup.erl
-module(rabbit_client_sup).!
!

-behaviour(supervisor2).!
!

-export([start_link/1, start_link/2, start_link_worker/2]).!
!

-export([init/1]).!
!

-include("rabbit.hrl").
rabbit_client_sup.erl
start_link(Callback) ->!
supervisor2:start_link(?MODULE, Callback).!
!

start_link(SupName, Callback) ->!
supervisor2:start_link(SupName, ?MODULE, Callback).!
!

start_link_worker(SupName, Callback) ->!
supervisor2:start_link(SupName, ?MODULE, {Callback, worker}).!
!

init({M,F,A}) ->!
{ok, {{simple_one_for_one, 0, 1},!
[{client, {M,F,A}, temporary, infinity, supervisor, [M]}]}};!
init({{M,F,A}, worker}) ->!
{ok, {{simple_one_for_one, 0, 1},!
[{client, {M,F,A}, temporary, ?MAX_WAIT, worker, [M]}]}}.
Supervision Trees
Supervision tree
•

Worker Processes

•

Supervisor Processes

•

Supervision tree as a hierarchical arrangement of processes

http://www.erlang.org/doc/man/supervisor.html
rabbit_client_sup
init({M,F,A}) ->!
{ok, {{simple_one_for_one, 0, 1},!
[{client, {M,F,A}, temporary, !
! ! ! !
infinity, supervisor, [M]}]}};
Child Spec - restart strategies
•

one_for_one: only restart failing process

•

one_for_all: restart failing process and all siblings

•

simple_one_for_one: simplified version of one_for_one

•

MaxR: maximum restarts allowed

•

MaxT: in MaxT seconds
Child Specification
child_spec() = {Id,StartFunc,Restart,Shutdown,Type,Modules}!
Id = term()!
StartFunc = {M,F,A}!
M = F = atom()!
A = [term()]!
Restart = permanent | transient | temporary!
Shutdown = brutal_kill | int()>0 | infinity!
Type = worker | supervisor!
Modules = [Module] | dynamic!
Module = atom()
rabbit_client_sup
init({M,F,A}) ->!
{ok, {{simple_one_for_one, 0, 1},!
[{client, {M,F,A}, temporary, !
! ! ! !
infinity, supervisor, [M]}]}};
Child Spec - restart
•

permanent: should always be restarted

•

temporary: should never be restarted

•

transient: should only be restarted if terminated abnormally
Child Spec - shutdown
•

brutal_kill: child is terminated immediately.

•

timeout in seconds: supervisor waits for timeout before terminating
children.

•

infinity: give enough timeout to children to shutdown its own
supervision tree.
Connection Supervision Tree
Connection Supervision Tree
Connection Supervision Tree
Connection Supervision Tree
Connection Supervision Tree
A day in the life of a message
A day in the life of a message
A day in the life of a message
Intermezzo: pattern matching
check_user_id_header(#'P_basic'{user_id = undefined}, _) ->!
ok;!
check_user_id_header(#'P_basic'{user_id = Username},!
#ch{user = #user{username = Username}}) ->!
ok;!
check_user_id_header(#'P_basic'{user_id = Claimed},!
#ch{user = #user{username = Actual,!
tags
= Tags}}) ->!
case lists:member(impersonator, Tags) of!
true -> ok;!
false -> precondition_failed(!
"user_id property set to '~s' but authenticated user was "!
"'~s'", [Claimed, Actual])!
end.
http://videlalvaro.github.io/2013/09/rabbitmq-validating-user-ids-with-erlang-pattern-matching.html
Read More Here:
http://videlalvaro.github.io/2013/09/rabbitmq-validating-user-ids-with-erlang-pattern-matching.html
A day in the life of a message
A day in the life of a message
A day in the life of a message
We have a list of queues
where the channel will
deliver the messages
A day in the life of a message
A day in the life of a message

If consumer ready
RabbitMQ Message Store
•

Made specifically for messaging

•

Keeps messages in memory and (sometimes) on disk

•

Bounded by disk size

•

per node message store (transient, persistent)

•

per queue “queue index”
RabbitMQ Message Store
•

Message written to disk when:
•

Message published as persistent (delivery_mode = 2)

•

Memory pressure
Read More Here:
Read More Here:
Why a custom message store?
!

http://www.rabbitmq.com/blog/2011/01/20/rabbitmq-backing-stores-databases-and-disks/
Read More Here:
Why a custom message store?
!

http://www.rabbitmq.com/blog/2011/01/20/rabbitmq-backing-stores-databases-and-disks/

How the message store compacts files
!

http://hg.rabbitmq.com/rabbitmq-server/file/56d190fd4ea3/src/rabbit_msg_store.erl#l181
Read More Here:
Why a custom message store?
!

http://www.rabbitmq.com/blog/2011/01/20/rabbitmq-backing-stores-databases-and-disks/

How the message store compacts files
!

http://hg.rabbitmq.com/rabbitmq-server/file/56d190fd4ea3/src/rabbit_msg_store.erl#l181
How the message store reacts to memory pressure
!

http://hg.rabbitmq.com/rabbitmq-server/file/56d190fd4ea3/src/rabbit_variable_queue.erl#l35
Credit Flow
Prevent processes from
overflowing each other’s mailboxes
Credit Specification

{InitialCredit, MoreCreditAfter}
Credit Specification

{200, 50}
Process A sends messages to B
Process will
•

Grant more credit

•

Block other processes

•

Delay granting credits
Read More Here:
http://videlalvaro.github.io/2013/09/rabbitmq-internals-credit-flowfor-erlang-processes.html
RabbitMQ Behaviours
RabbitMQ Behaviours
•

Add a common interface for different components
RabbitMQ Behaviours
•

Add a common interface for different components
•

Exchanges
RabbitMQ Behaviours
•

Add a common interface for different components
•

Exchanges

•

Queues
RabbitMQ Behaviours
•

Add a common interface for different components
•

Exchanges

•

Queues

•

Decorators
RabbitMQ Behaviours
•

Add a common interface for different components
•

Exchanges

•

Queues

•

Decorators

•

Authentication methods
RabbitMQ Behaviours
•

Add a common interface for different components
•
•

Queues

•

Decorators

•
•

Exchanges

Authentication methods

Add extensibility
rabbit_exchange_type
-module(rabbit_exchange_type).!
!

-callback description() -> [proplists:property()].!
!

-callback serialise_events() -> boolean().!
!

-callback route(rabbit_types:exchange(), rabbit_types:delivery()) ->!
rabbit_router:match_result().!
!

-callback validate(rabbit_types:exchange()) -> 'ok'.!
!

-callback validate_binding(rabbit_types:exchange(), rabbit_types:binding()) ->!
rabbit_types:ok_or_error({'binding_invalid', string(), [any()]}).
rabbit_exchange_type
•

You can add your own exchange type via plugins
•

consistent hash exchange

•

random exchange

•

recent history exchange

•

riak exchange
RabbitMQ Behaviours
•
•
•

rabbit_auth_backend
rabbit_msg_store_index
rabbit_backing_queue

(config)
(config)
(config)
RabbitMQ Behaviours
•
•
•

rabbit_auth_backend
rabbit_msg_store_index
rabbit_backing_queue

(config)
(config)
(config)

[{rabbit,!
[{auth_backends, [rabbit_auth_backend_http, !
rabbit_auth_backend_internal]}]!
}].
RabbitMQ Behaviours
•
•
•
•
•
•
•

rabbit_auth_mechanism
rabbit_exchange_decorator
rabbit_exchange_type
rabbit_mirror_queue_mode
rabbit_policy_validator
rabbit_queue_decorator
rabbit_runtime_parameter

(registry)
(registry)
(registry)
(registry)
(registry)
(registry)
(registry)
RabbitMQ Behaviours
•
•
•
•
•
•
•

rabbit_auth_mechanism
rabbit_exchange_decorator
rabbit_exchange_type
rabbit_mirror_queue_mode
rabbit_policy_validator
rabbit_queue_decorator
rabbit_runtime_parameter

(registry)
(registry)
(registry)
(registry)
(registry)
(registry)
(registry)

-rabbit_boot_step({?MODULE,!
[{description, "exchange type direct"},!
{mfa,
{rabbit_registry, register,!
[exchange, <<"direct">>, ?MODULE]}},!
{requires,
rabbit_registry},!
{enables,
kernel_ready}]}).
RabbitMQ Federation Plugin
•

Message replication across WANs

•

Uses an exchange decorator

•

Uses a queue decorator

•

Uses parameters

•

Uses policies
RabbitMQ Federation Plugin
rabbitmqctl set_parameter federation-upstream my-upstream !
'{"uri":"amqp://server-name","expires":3600000}'
RabbitMQ Federation Plugin
rabbitmqctl set_parameter federation-upstream my-upstream !
'{"uri":"amqp://server-name","expires":3600000}'

rabbitmqctl set_policy federate-me "^amq." '{"federation-upstreamset":"all"}'
RabbitMQ Federation Plugin
-module(rabbit_federation_queue).!
!

-rabbit_boot_step({?MODULE,!
[{description, "federation queue decorator"},!
{mfa, {rabbit_registry, register,!
[queue_decorator, <<"federation">>, ?MODULE]}},!
{requires, rabbit_registry},!
{enables, recovery}]}).!
!

-behaviour(rabbit_queue_decorator).
RabbitMQ Federation Plugin
-module(rabbit_federation_exchange).!
!

-rabbit_boot_step({?MODULE,!
[{description, "federation exchange decorator"},!
{mfa, {rabbit_registry, register,!
[exchange_decorator, <<"federation">>, ?MODULE]}},!
{requires, rabbit_registry},!
{enables, recovery}]}).!
!

-behaviour(rabbit_exchange_decorator).
Read More Here:
http://www.rabbitmq.com/federation.html
Read More Here:
Making sure the user provided the right behaviour:
!

http://videlalvaro.github.io/2013/09/rabbitmq-internals-validating-erlang-behaviours.html

How RabbitMQ prevents arbitrary code execution:
!

http://videlalvaro.github.io/2013/09/rabbitmq-sanitzing-user-input-in-erlang.html

RabbitMQ Boot Step System:
!

https://github.com/videlalvaro/rabbit-internals/blob/master/rabbit_boot_process.md
RabbitMQ uses Erlang’s features to
be robust, fault tolerant and very
extensible
Go grab the source code!

http://hg.rabbitmq.com/rabbitmq-server/
Questions?
Thanks
Alvaro Videla - @old_sound

More Related Content

PDF
Introduction to Redis
Dvir Volk
 
PDF
InnoDB Locking Explained with Stick Figures
Karwin Software Solutions LLC
 
KEY
Introduction to memcached
Jurriaan Persyn
 
PPTX
Introduction to Node.js
AMD Developer Central
 
PDF
Microservices & API Gateways
Kong Inc.
 
PDF
Best Practice-React
Yang Yang
 
PPTX
Kafka presentation
Mohammed Fazuluddin
 
PDF
Introduction to MongoDB
Mike Dirolf
 
Introduction to Redis
Dvir Volk
 
InnoDB Locking Explained with Stick Figures
Karwin Software Solutions LLC
 
Introduction to memcached
Jurriaan Persyn
 
Introduction to Node.js
AMD Developer Central
 
Microservices & API Gateways
Kong Inc.
 
Best Practice-React
Yang Yang
 
Kafka presentation
Mohammed Fazuluddin
 
Introduction to MongoDB
Mike Dirolf
 

What's hot (20)

PDF
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
mumrah
 
PPTX
Prometheus - Intro, CNCF, TSDB,PromQL,Grafana
Sridhar Kumar N
 
PPTX
Indexing with MongoDB
MongoDB
 
PPT
Docker introduction
Phuc Nguyen
 
PDF
Introduction to ASP.NET Core
Avanade Nederland
 
PDF
kubernetes for beginners
Dominique Dumont
 
PDF
Iocp 기본 구조 이해
Nam Hyeonuk
 
PPT
Node.js Basics
TheCreativedev Blog
 
PPSX
Docker Kubernetes Istio
Araf Karsh Hamid
 
PPTX
From cache to in-memory data grid. Introduction to Hazelcast.
Taras Matyashovsky
 
PDF
Client Side MVC & Angular
Alexe Bogdan
 
PDF
Iocp advanced
Nam Hyeonuk
 
PPTX
Apache Kafka 0.8 basic training - Verisign
Michael Noll
 
PDF
Understanding react hooks
Samundra khatri
 
PPTX
Introduction to MongoDB
MongoDB
 
PDF
Cassandra Introduction & Features
DataStax Academy
 
PPTX
Serverless integration with Knative and Apache Camel on Kubernetes
Claus Ibsen
 
PPTX
Introduction to Kafka and Zookeeper
Rahul Jain
 
PDF
NodeJS for Beginner
Apaichon Punopas
 
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
mumrah
 
Prometheus - Intro, CNCF, TSDB,PromQL,Grafana
Sridhar Kumar N
 
Indexing with MongoDB
MongoDB
 
Docker introduction
Phuc Nguyen
 
Introduction to ASP.NET Core
Avanade Nederland
 
kubernetes for beginners
Dominique Dumont
 
Iocp 기본 구조 이해
Nam Hyeonuk
 
Node.js Basics
TheCreativedev Blog
 
Docker Kubernetes Istio
Araf Karsh Hamid
 
From cache to in-memory data grid. Introduction to Hazelcast.
Taras Matyashovsky
 
Client Side MVC & Angular
Alexe Bogdan
 
Iocp advanced
Nam Hyeonuk
 
Apache Kafka 0.8 basic training - Verisign
Michael Noll
 
Understanding react hooks
Samundra khatri
 
Introduction to MongoDB
MongoDB
 
Cassandra Introduction & Features
DataStax Academy
 
Serverless integration with Knative and Apache Camel on Kubernetes
Claus Ibsen
 
Introduction to Kafka and Zookeeper
Rahul Jain
 
NodeJS for Beginner
Apaichon Punopas
 
Ad

Viewers also liked (20)

PPTX
High powered messaging with RabbitMQ
James Carr
 
PDF
Introduction to AMQP Messaging with RabbitMQ
Dmitriy Samovskiy
 
PDF
The Future of Messaging: RabbitMQ and AMQP
Eberhard Wolff
 
PDF
Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff
JAX London
 
PDF
RabbitMQ Data Ingestion
Alvaro Videla
 
PDF
Messaging Standards and Systems - AMQP & RabbitMQ
All Things Open
 
PDF
Rabbitmq Boot System
Alvaro Videla
 
PDF
Introduction to RabbitMQ | Meetup at Pivotal Labs
Alvaro Videla
 
PDF
Scaling applications with RabbitMQ at SunshinePHP
Alvaro Videla
 
PDF
RabbitMQ fairly-indepth
Wee Keat Chin
 
PPTX
Event Driven Architecture - MeshU - Ilya Grigorik
Ilya Grigorik
 
PPTX
The RabbitMQ Message Broker
Martin Toshev
 
PPTX
Apache kafka
Rahul Jain
 
PPTX
RabbitMQ Model and Some Example Applications
Houcheng Lin
 
PPTX
JSON and REST
Robert MacLean
 
PPTX
Apache thrift
ducdv
 
PPTX
Culture
Reed Hastings
 
PPTX
Apache http server
Hai Dinh Tuan
 
PDF
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Ontico
 
PPTX
RabbitMQ Plugins Talk
Lecturer UC Davis & Northwestern
 
High powered messaging with RabbitMQ
James Carr
 
Introduction to AMQP Messaging with RabbitMQ
Dmitriy Samovskiy
 
The Future of Messaging: RabbitMQ and AMQP
Eberhard Wolff
 
Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff
JAX London
 
RabbitMQ Data Ingestion
Alvaro Videla
 
Messaging Standards and Systems - AMQP & RabbitMQ
All Things Open
 
Rabbitmq Boot System
Alvaro Videla
 
Introduction to RabbitMQ | Meetup at Pivotal Labs
Alvaro Videla
 
Scaling applications with RabbitMQ at SunshinePHP
Alvaro Videla
 
RabbitMQ fairly-indepth
Wee Keat Chin
 
Event Driven Architecture - MeshU - Ilya Grigorik
Ilya Grigorik
 
The RabbitMQ Message Broker
Martin Toshev
 
Apache kafka
Rahul Jain
 
RabbitMQ Model and Some Example Applications
Houcheng Lin
 
JSON and REST
Robert MacLean
 
Apache thrift
ducdv
 
Culture
Reed Hastings
 
Apache http server
Hai Dinh Tuan
 
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Ontico
 
RabbitMQ Plugins Talk
Lecturer UC Davis & Northwestern
 
Ad

Similar to Dissecting the rabbit: RabbitMQ Internal Architecture (20)

PDF
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Tanya Denisyuk
 
PDF
Chaione Ember.js Training
aortbals
 
PDF
Messaging with amqp and rabbitmq
Selasie Hanson
 
PDF
RabbitMQ Data Ingestion at Craft Conf
Alvaro Videla
 
PDF
Open Source Swift Under the Hood
C4Media
 
PDF
Improvements in RabbitMQ
Alvaro Videla
 
KEY
20120524 english lt2_pythontoolsfortesting
Kazuhiro Oinuma
 
PDF
Project Basecamp: News From Camp 4
Digital Bond
 
KEY
Introduction to Actor Model and Akka
Yung-Lin Ho
 
PDF
Puppet Camp NYC 2014: Build a Modern Infrastructure in 45 min!
Puppet
 
PDF
Spinnaker 파트 1
Steven Shim
 
PDF
PHP Backends for Real-Time User Interaction using Apache Storm.
DECK36
 
PDF
MongoUK 2011 - Rplacing RabbitMQ with MongoDB
Boxed Ice
 
PPTX
Go Faster with Ansible (PHP meetup)
Richard Donkin
 
PDF
An Introduction to Go
Cloudflare
 
KEY
Message:Passing - lpw 2012
Tomas Doran
 
KEY
London devops logging
Tomas Doran
 
PDF
Highly concurrent yet natural programming
Infinit
 
KEY
Messaging, interoperability and log aggregation - a new framework
Tomas Doran
 
PDF
TorqueBox at GNUnify 2012
Saleem Ansari
 
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Tanya Denisyuk
 
Chaione Ember.js Training
aortbals
 
Messaging with amqp and rabbitmq
Selasie Hanson
 
RabbitMQ Data Ingestion at Craft Conf
Alvaro Videla
 
Open Source Swift Under the Hood
C4Media
 
Improvements in RabbitMQ
Alvaro Videla
 
20120524 english lt2_pythontoolsfortesting
Kazuhiro Oinuma
 
Project Basecamp: News From Camp 4
Digital Bond
 
Introduction to Actor Model and Akka
Yung-Lin Ho
 
Puppet Camp NYC 2014: Build a Modern Infrastructure in 45 min!
Puppet
 
Spinnaker 파트 1
Steven Shim
 
PHP Backends for Real-Time User Interaction using Apache Storm.
DECK36
 
MongoUK 2011 - Rplacing RabbitMQ with MongoDB
Boxed Ice
 
Go Faster with Ansible (PHP meetup)
Richard Donkin
 
An Introduction to Go
Cloudflare
 
Message:Passing - lpw 2012
Tomas Doran
 
London devops logging
Tomas Doran
 
Highly concurrent yet natural programming
Infinit
 
Messaging, interoperability and log aggregation - a new framework
Tomas Doran
 
TorqueBox at GNUnify 2012
Saleem Ansari
 

More from Alvaro Videla (19)

PDF
Data Migration at Scale with RabbitMQ and Spring Integration
Alvaro Videla
 
PDF
Unit Test + Functional Programming = Love
Alvaro Videla
 
PDF
Writing testable code
Alvaro Videla
 
PDF
RabbitMQ Hands On
Alvaro Videla
 
PDF
Cloud Foundry Bootcamp
Alvaro Videla
 
PDF
Cloud Messaging With Cloud Foundry
Alvaro Videla
 
PDF
Taming the rabbit
Alvaro Videla
 
PDF
Vertx
Alvaro Videla
 
PDF
Código Fácil De Testear
Alvaro Videla
 
PDF
Desacoplando aplicaciones
Alvaro Videla
 
PDF
Messaging patterns
Alvaro Videla
 
PDF
Theres a rabbit on my symfony
Alvaro Videla
 
PDF
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Alvaro Videla
 
PDF
Integrating php withrabbitmq_zendcon
Alvaro Videla
 
PDF
Scaling webappswithrabbitmq
Alvaro Videla
 
PDF
Integrating RabbitMQ with PHP
Alvaro Videla
 
PDF
Integrating Erlang with PHP
Alvaro Videla
 
PDF
Interoperability With RabbitMq
Alvaro Videla
 
PDF
Debugging and Profiling Symfony Apps
Alvaro Videla
 
Data Migration at Scale with RabbitMQ and Spring Integration
Alvaro Videla
 
Unit Test + Functional Programming = Love
Alvaro Videla
 
Writing testable code
Alvaro Videla
 
RabbitMQ Hands On
Alvaro Videla
 
Cloud Foundry Bootcamp
Alvaro Videla
 
Cloud Messaging With Cloud Foundry
Alvaro Videla
 
Taming the rabbit
Alvaro Videla
 
Código Fácil De Testear
Alvaro Videla
 
Desacoplando aplicaciones
Alvaro Videla
 
Messaging patterns
Alvaro Videla
 
Theres a rabbit on my symfony
Alvaro Videla
 
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Alvaro Videla
 
Integrating php withrabbitmq_zendcon
Alvaro Videla
 
Scaling webappswithrabbitmq
Alvaro Videla
 
Integrating RabbitMQ with PHP
Alvaro Videla
 
Integrating Erlang with PHP
Alvaro Videla
 
Interoperability With RabbitMq
Alvaro Videla
 
Debugging and Profiling Symfony Apps
Alvaro Videla
 

Recently uploaded (20)

PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PPTX
Simple and concise overview about Quantum computing..pptx
mughal641
 
PDF
The Future of Artificial Intelligence (AI)
Mukul
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
PDF
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
PDF
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
PPTX
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
PPTX
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PDF
Doc9.....................................
SofiaCollazos
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
Simple and concise overview about Quantum computing..pptx
mughal641
 
The Future of Artificial Intelligence (AI)
Mukul
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
Doc9.....................................
SofiaCollazos
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 

Dissecting the rabbit: RabbitMQ Internal Architecture