SlideShare a Scribd company logo
Scaling Applications
with RabbitMQ
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
About this Talk

•

Exploratory Talk

•

A ‘what could be done’ talk instead of ‘this is how you do it’
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!
Telefonica
Some users of RabbitMQ
•
•
•
•

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

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

Instagram!
Indeed.com!
Telefonica!
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
What you get out of the box
Some RabbitMQ Features
Some RabbitMQ Features
•

No message loss
Some RabbitMQ Features
•

No message loss

•

Persistent Messages
Some RabbitMQ Features
•

No message loss

•

Persistent Messages

•

Publisher Confirms
Some RabbitMQ Features
•

No message loss

•

Persistent Messages

•

Publisher Confirms

•

Message Acknowledgment
Some RabbitMQ Features
•

No message loss

•

Persistent Messages

•

Publisher Confirms

•

Message Acknowledgment

•

Mirrored Queues
Some RabbitMQ Features
•

No message loss

•

Persistent Messages

•

Publisher Confirms

•

Message Acknowledgment

•

Mirrored Queues

•

Message Ordering
Some RabbitMQ Features
Some RabbitMQ Features
•

Dead Letter Exchanges
Some RabbitMQ Features
•

Dead Letter Exchanges

•

Alternate Exchanges
Some RabbitMQ Features
•

Dead Letter Exchanges

•

Alternate Exchanges

•

Message and Queues TTLs
Some RabbitMQ Features
•

Dead Letter Exchanges

•

Alternate Exchanges

•

Message and Queues TTLs

•

Consumer Priorities
Some RabbitMQ Features
•

Dead Letter Exchanges

•

Alternate Exchanges

•

Message and Queues TTLs

•

Consumer Priorities

•

Federation
Some RabbitMQ Features
•

Dead Letter Exchanges

•

Alternate Exchanges

•

Message and Queues TTLs

•

Consumer Priorities

•

Federation

•

Shovel
Preventing unbounded
buffers with RabbitMQ
http://bit.ly/1eCKYK8
RabbitMQ Management
Scenario

Batch Processing
Requirements
Requirements
•

Generate XML
Requirements
•

Generate XML

•

Distribution Over a Cluster
Requirements
•

Generate XML

•

Distribution Over a Cluster

•

Elasticity - Add/Remove new workers
Requirements
•

Generate XML

•

Distribution Over a Cluster

•

Elasticity - Add/Remove new workers

•

No Code Changes
Design
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false, 	
true, false);	
!

$msg = new AMQPMessage($video_info, 	
array('content_type' => 'text/plain',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'video-desc-ex');	
!

$channel->close();	
$conn->close();
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false, 	
true, false);	
!

$msg = new AMQPMessage($video_info, 	
array('content_type' => 'text/plain',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'video-desc-ex');	
!

$channel->close();	
$conn->close();
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false, 	
true, false);	
!

$msg = new AMQPMessage($video_info, 	
array('content_type' => 'text/plain',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'video-desc-ex');	
!

$channel->close();	
$conn->close();
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false, 	
true, false);	
!

$msg = new AMQPMessage($video_info, 	
array('content_type' => 'text/plain',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'video-desc-ex');	
!

$channel->close();	
$conn->close();
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false, 	
true, false);	
!

$msg = new AMQPMessage($video_info, 	
array('content_type' => 'text/plain',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'video-desc-ex');	
!

$channel->close();	
$conn->close();
Publisher Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false, 	
true, false);	
!

$msg = new AMQPMessage($video_info, 	
array('content_type' => 'text/plain',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'video-desc-ex');	
!

$channel->close();	
$conn->close();
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false,	
true, false);	
$channel->queue_declare('video-desc-queue', false, true,	
false, false);	
$channel->queue_bind('video-desc-queue', 'video-desc-ex');	
!

$channel->basic_consume('video-desc-queue', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false,	
true, false);	
$channel->queue_declare('video-desc-queue', false, true,	
false, false);	
$channel->queue_bind('video-desc-queue', 'video-desc-ex');	
!

$channel->basic_consume('video-desc-queue', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false,	
true, false);	
$channel->queue_declare('video-desc-queue', false, true,	
false, false);	
$channel->queue_bind('video-desc-queue', 'video-desc-ex');	
!

$channel->basic_consume('video-desc-queue', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false,	
true, false);	
$channel->queue_declare('video-desc-queue', false, true,	
false, false);	
$channel->queue_bind('video-desc-queue', 'video-desc-ex');	
!

$channel->basic_consume('video-desc-queue', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false,	
true, false);	
$channel->queue_declare('video-desc-queue', false, true,	
false, false);	
$channel->queue_bind('video-desc-queue', 'video-desc-ex');	
!

$channel->basic_consume('video-desc-queue', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false,	
true, false);	
$channel->queue_declare('video-desc-queue', false, true,	
false, false);	
$channel->queue_bind('video-desc-queue', 'video-desc-ex');	
!

$channel->basic_consume('video-desc-queue', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$conn = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);	
$channel = $conn->channel();	
!

$channel->exchange_declare('video-desc-ex', 'direct', false,	
true, false);	
$channel->queue_declare('video-desc-queue', false, true,	
false, false);	
$channel->queue_bind('video-desc-queue', 'video-desc-ex');	
!

$channel->basic_consume('video-desc-queue', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Scenario

Upload Pictures
Requirements
Requirements
•

Upload Picture
Requirements
•

Upload Picture

•

Reward User
Requirements
•

Upload Picture

•

Reward User

•

Notify User Friends
Requirements
•

Upload Picture

•

Reward User

•

Notify User Friends

•

Resize Picture
Requirements
•

Upload Picture

•

Reward User

•

Notify User Friends

•

Resize Picture

•

No Code Changes
Design
Design
Design
Publisher Code
$channel->exchange_declare('upload-pictures', 'fanout', false,
true, false);	
!

$metadata = json_encode(array(	
'image_id' => $image_id,	
'user_id' => $user_id,	
‘image_path' => $image_path));	
!

$msg = new AMQPMessage($metadata, array('content_type' =>
'application/json',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'upload-pictures');
Publisher Code
$channel->exchange_declare('upload-pictures', 'fanout', false,
true, false);	
!

$metadata = json_encode(array(	
'image_id' => $image_id,	
'user_id' => $user_id,	
‘image_path' => $image_path));	
!

$msg = new AMQPMessage($metadata, array('content_type' =>
'application/json',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'upload-pictures');
Publisher Code
$channel->exchange_declare('upload-pictures', 'fanout', false,
true, false);	
!

$metadata = json_encode(array(	
'image_id' => $image_id,	
'user_id' => $user_id,	
‘image_path' => $image_path));	
!

$msg = new AMQPMessage($metadata, array('content_type' =>
'application/json',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'upload-pictures');
Publisher Code
$channel->exchange_declare('upload-pictures', 'fanout', false,
true, false);	
!

$metadata = json_encode(array(	
'image_id' => $image_id,	
'user_id' => $user_id,	
‘image_path' => $image_path));	
!

$msg = new AMQPMessage($metadata, array('content_type' =>
'application/json',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'upload-pictures');
Publisher Code
$channel->exchange_declare('upload-pictures', 'fanout', false,
true, false);	
!

$metadata = json_encode(array(	
'image_id' => $image_id,	
'user_id' => $user_id,	
‘image_path' => $image_path));	
!

$msg = new AMQPMessage($metadata, array('content_type' =>
'application/json',
'delivery_mode' => 2));	
!

$channel->basic_publish($msg, 'upload-pictures');
Consumer Code
$channel->exchange_declare('upload-pictures', 'fanout', 	
false, true, false);	
!

$channel->queue_declare('resize-picture', false, true, 	
false, false);	
!

$channel->queue_bind('resize-picture', 'upload-pictures');	
!

$channel->basic_consume('resize-picture', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$channel->exchange_declare('upload-pictures', 'fanout', 	
false, true, false);	
!

$channel->queue_declare('resize-picture', false, true, 	
false, false);	
!

$channel->queue_bind('resize-picture', 'upload-pictures');	
!

$channel->basic_consume('resize-picture', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$channel->exchange_declare('upload-pictures', 'fanout', 	
false, true, false);	
!

$channel->queue_declare('resize-picture', false, true, 	
false, false);	
!

$channel->queue_bind('resize-picture', 'upload-pictures');	
!

$channel->basic_consume('resize-picture', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$channel->exchange_declare('upload-pictures', 'fanout', 	
false, true, false);	
!

$channel->queue_declare('resize-picture', false, true, 	
false, false);	
!

$channel->queue_bind('resize-picture', 'upload-pictures');	
!

$channel->basic_consume('resize-picture', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$channel->exchange_declare('upload-pictures', 'fanout', 	
false, true, false);	
!

$channel->queue_declare('resize-picture', false, true, 	
false, false);	
!

$channel->queue_bind('resize-picture', 'upload-pictures');	
!

$channel->basic_consume('resize-picture', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$channel->exchange_declare('upload-pictures', 'fanout', 	
false, true, false);	
!

$channel->queue_declare('resize-picture', false, true, 	
false, false);	
!

$channel->queue_bind('resize-picture', 'upload-pictures');	
!

$channel->basic_consume('resize-picture', $consumer_tag, 	
false, false, false, false, $consumer);	
!

while(count($channel->callbacks)) {	
$channel->wait();	
}
Consumer Code
$consumer = function($msg){	
!

$meta = json_decode($msg->body, true);	
	 	
resize_picture($meta['image_id'], $meta['image_path']);	
	 	
$msg->delivery_info['channel']->	
basic_ack($msg->delivery_info['delivery_tag']);	
};
Consumer Code
$consumer = function($msg){	
!

$meta = json_decode($msg->body, true);	
	 	
resize_picture($meta['image_id'], $meta['image_path']);	
	 	
$msg->delivery_info['channel']->	
basic_ack($msg->delivery_info['delivery_tag']);	
};
Consumer Code
$consumer = function($msg){	
!

$meta = json_decode($msg->body, true);	
	 	
resize_picture($meta['image_id'], $meta['image_path']);	
	 	
$msg->delivery_info['channel']->	
basic_ack($msg->delivery_info['delivery_tag']);	
};
Consumer Code
$consumer = function($msg){	
!

$meta = json_decode($msg->body, true);	
	 	
resize_picture($meta['image_id'], $meta['image_path']);	
	 	
$msg->delivery_info['channel']->	
basic_ack($msg->delivery_info['delivery_tag']);	
};
Consumer Code
$consumer = function($msg){	
!

$meta = json_decode($msg->body, true);	
	 	
resize_picture($meta['image_id'], $meta['image_path']);	
	 	
$msg->delivery_info['channel']->	
basic_ack($msg->delivery_info['delivery_tag']);	
};
Scenario

Distributed Logging
Requirements
Requirements
•

Several Web Servers
Requirements
•

Several Web Servers

•

Logic Separated by Module/Action
Requirements
•

Several Web Servers

•

Logic Separated by Module/Action

•

Several Log Levels: info, warning and error
Requirements
•

Several Web Servers

•

Logic Separated by Module/Action

•

Several Log Levels: info, warning and error

•

Add Remove log listeners at will
Design
Design
Design
Design
Design
Publisher Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$msg = new AMQPMessage('some log message',	
array('content_type' => 'text/plain'));	
!

$channel->basic_publish($msg, 'logs', 	
'server1.user.profile.info');
Publisher Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$msg = new AMQPMessage('some log message',	
array('content_type' => 'text/plain'));	
!

$channel->basic_publish($msg, 'logs', 	
'server1.user.profile.info');
Publisher Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$msg = new AMQPMessage('some log message',	
array('content_type' => 'text/plain'));	
!

$channel->basic_publish($msg, 'logs', 	
'server1.user.profile.info');
Publisher Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$msg = new AMQPMessage('some log message',	
array('content_type' => 'text/plain'));	
!

$channel->basic_publish($msg, 'logs', 	
'server1.user.profile.info');
Consumer Code
Get messages sent by host:	

!

server1
Consumer Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$channel->queue_declare('server1-logs', false, true, 	
false, false);	
!

$channel->queue_bind('server1-logs', 'logs', 'server1.#');
Consumer Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$channel->queue_declare('server1-logs', false, true, 	
false, false);	
!

$channel->queue_bind('server1-logs', 'logs', 'server1.#');
Consumer Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$channel->queue_declare('server1-logs', false, true, 	
false, false);	
!

$channel->queue_bind('server1-logs', 'logs', 'server1.#');
Consumer Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$channel->queue_declare('server1-logs', false, true, 	
false, false);	
!

$channel->queue_bind('server1-logs', 'logs', 'server1.#');
Consumer Code
Get all error messages
Consumer Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$channel->queue_declare('error-logs', false, true, 	
false, false);	
!

$channel->queue_bind('error-logs', 'logs', '#.error');
Consumer Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$channel->queue_declare('error-logs', false, true, 	
false, false);	
!

$channel->queue_bind('error-logs', 'logs', '#.error');
Consumer Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$channel->queue_declare('error-logs', false, true, 	
false, false);	
!

$channel->queue_bind('error-logs', 'logs', '#.error');
Consumer Code
$channel->exchange_declare('logs', 'topic', false, 	
true, false);	
!

$channel->queue_declare('error-logs', false, true, 	
false, false);	
!

$channel->queue_bind('error-logs', 'logs', '#.error');
Distributed Apps
Distributed Application
App

App

App

App
Distributed Application
App

App

App

App
Ad-hoc solution
A process that replicates data
to the remote server
Possible issues
•

Remote server is offline
•
•

•

Prevent unbounded local buffers
Prevent message loss

Prevent unnecessary message replication
•

No need for those messages on remote server

•

Messages that became stale
Can we do better?
RabbitMQ Federation
RabbitMQ Federation
•

Supports replication across different administrative domains

•

Supports mix of Erlang and RabbitMQ versions

•

Supports Network Partitions

•

Specificity - not everything has to be federated
RabbitMQ Federation
RabbitMQ Federation
RabbitMQ Federation
RabbitMQ Federation
•

It’s a RabbitMQ Plugin
RabbitMQ Federation
•

It’s a RabbitMQ Plugin

•

Internally uses Queues and Exchanges Decorators
RabbitMQ Federation
•

It’s a RabbitMQ Plugin

•

Internally uses Queues and Exchanges Decorators

•

Managed using Parameters and Policies
Enabling the Plugin
rabbitmq-plugins enable rabbitmq_federation
Enabling the Plugin
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
Federating an Exchange
rabbitmqctl set_parameter federation-upstream my-upstream 
‘{“uri":"amqp://server-name","expires":3600000}'
Federating an Exchange
rabbitmqctl set_parameter federation-upstream my-upstream 
‘{“uri":"amqp://server-name","expires":3600000}'
!

rabbitmqctl set_policy --apply-to exchanges federate-me "^amq." 
'{"federation-upstream-set":"all"}'
Federating an Exchange
With RabbitMQ we can
With RabbitMQ we can
•

Ingest data using various protocols: AMQP, MQTT and STOMP
With RabbitMQ we can
•

Ingest data using various protocols: AMQP, MQTT and STOMP

•

Distribute that data globally using Federation
With RabbitMQ we can
•

Ingest data using various protocols: AMQP, MQTT and STOMP

•

Distribute that data globally using Federation

•

Scale up using with different consumer strategies
With RabbitMQ we can
•

Ingest data using various protocols: AMQP, MQTT and STOMP

•

Distribute that data globally using Federation

•

Scale up using with different consumer strategies

•

Integrate across many platforms and programming languages
Questions?
Talk and Slides

https://joind.in/talk/view/10525
Thanks
Alvaro Videla - @old_sound

Credits
world map: wikipedia.org
federation diagrams: rabbitmq.com
Ad

More Related Content

What's hot (20)

The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP
Eberhard Wolff
 
Scaling application with RabbitMQ
Scaling application with RabbitMQScaling application with RabbitMQ
Scaling application with RabbitMQ
Nahidul Kibria
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQ
James Carr
 
Troubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use itTroubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use it
Michael Klishin
 
RabbitMQ Operations
RabbitMQ OperationsRabbitMQ Operations
RabbitMQ Operations
Michael Klishin
 
RabbitMQ Model and Some Example Applications
RabbitMQ Model and Some Example ApplicationsRabbitMQ Model and Some Example Applications
RabbitMQ Model and Some Example Applications
Houcheng Lin
 
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Paolo Negri
 
Rabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging PatternsRabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging Patterns
Javier Arias Losada
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQ
All Things Open
 
Messaging with RabbitMQ and AMQP
Messaging with RabbitMQ and AMQPMessaging with RabbitMQ and AMQP
Messaging with RabbitMQ and AMQP
Eberhard Wolff
 
Improvements in RabbitMQ
Improvements in RabbitMQImprovements in RabbitMQ
Improvements in RabbitMQ
Alvaro Videla
 
RabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfRabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft Conf
Alvaro Videla
 
The RabbitMQ Message Broker
The RabbitMQ Message BrokerThe RabbitMQ Message Broker
The RabbitMQ Message Broker
Martin Toshev
 
RabbitMQ vs Apache Kafka Part II Webinar
RabbitMQ vs Apache Kafka Part II WebinarRabbitMQ vs Apache Kafka Part II Webinar
RabbitMQ vs Apache Kafka Part II Webinar
Erlang Solutions
 
RabbitMQ fairly-indepth
RabbitMQ fairly-indepthRabbitMQ fairly-indepth
RabbitMQ fairly-indepth
Wee Keat Chin
 
Spring RabbitMQ
Spring RabbitMQSpring RabbitMQ
Spring RabbitMQ
Martin Toshev
 
Introduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQIntroduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQ
Dmitriy Samovskiy
 
Distributed messaging with AMQP
Distributed messaging with AMQPDistributed messaging with AMQP
Distributed messaging with AMQP
Wee Keat Chin
 
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
Paolo Negri
 
Messaging with amqp and rabbitmq
Messaging with amqp and rabbitmqMessaging with amqp and rabbitmq
Messaging with amqp and rabbitmq
Selasie Hanson
 
The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP
Eberhard Wolff
 
Scaling application with RabbitMQ
Scaling application with RabbitMQScaling application with RabbitMQ
Scaling application with RabbitMQ
Nahidul Kibria
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQ
James Carr
 
Troubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use itTroubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use it
Michael Klishin
 
RabbitMQ Model and Some Example Applications
RabbitMQ Model and Some Example ApplicationsRabbitMQ Model and Some Example Applications
RabbitMQ Model and Some Example Applications
Houcheng Lin
 
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Distributed and concurrent programming with RabbitMQ and EventMachine Rails U...
Paolo Negri
 
Rabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging PatternsRabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging Patterns
Javier Arias Losada
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQ
All Things Open
 
Messaging with RabbitMQ and AMQP
Messaging with RabbitMQ and AMQPMessaging with RabbitMQ and AMQP
Messaging with RabbitMQ and AMQP
Eberhard Wolff
 
Improvements in RabbitMQ
Improvements in RabbitMQImprovements in RabbitMQ
Improvements in RabbitMQ
Alvaro Videla
 
RabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfRabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft Conf
Alvaro Videla
 
The RabbitMQ Message Broker
The RabbitMQ Message BrokerThe RabbitMQ Message Broker
The RabbitMQ Message Broker
Martin Toshev
 
RabbitMQ vs Apache Kafka Part II Webinar
RabbitMQ vs Apache Kafka Part II WebinarRabbitMQ vs Apache Kafka Part II Webinar
RabbitMQ vs Apache Kafka Part II Webinar
Erlang Solutions
 
RabbitMQ fairly-indepth
RabbitMQ fairly-indepthRabbitMQ fairly-indepth
RabbitMQ fairly-indepth
Wee Keat Chin
 
Introduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQIntroduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQ
Dmitriy Samovskiy
 
Distributed messaging with AMQP
Distributed messaging with AMQPDistributed messaging with AMQP
Distributed messaging with AMQP
Wee Keat Chin
 
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
%w(map reduce).first - A Tale About Rabbits, Latency, and Slim Crontabs
Paolo Negri
 
Messaging with amqp and rabbitmq
Messaging with amqp and rabbitmqMessaging with amqp and rabbitmq
Messaging with amqp and rabbitmq
Selasie Hanson
 

Viewers also liked (20)

Software Architectures, Week 4 - Message-based Architectures, Message Bus
Software Architectures, Week 4 - Message-based Architectures, Message BusSoftware Architectures, Week 4 - Message-based Architectures, Message Bus
Software Architectures, Week 4 - Message-based Architectures, Message Bus
Angelos Kapsimanis
 
Juc boston2014.pptx
Juc boston2014.pptxJuc boston2014.pptx
Juc boston2014.pptx
Brandon Mueller
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfony
Alvaro Videla
 
Telephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBTelephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDB
Mark Atwood
 
Taste Rabbitmq
Taste RabbitmqTaste Rabbitmq
Taste Rabbitmq
jeff kit
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战
mysqlops
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redis
paitoubing
 
Working with Asynchronous Events
Working with Asynchronous EventsWorking with Asynchronous Events
Working with Asynchronous Events
Garden of Concepts GmbH
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现
iammutex
 
Redis介绍
Redis介绍Redis介绍
Redis介绍
zhaolinjnu
 
Introduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsIntroduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal Labs
Alvaro Videla
 
RabbitMQ Messaging
RabbitMQ MessagingRabbitMQ Messaging
RabbitMQ Messaging
Marcus Crafter
 
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRFOWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
Paul Mooney
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven Architecture
Chris Patterson
 
Sophos Day Belgium - This is Next-Gen IT Security (Sophos Intercept X)
Sophos Day Belgium - This is Next-Gen IT Security (Sophos Intercept X)Sophos Day Belgium - This is Next-Gen IT Security (Sophos Intercept X)
Sophos Day Belgium - This is Next-Gen IT Security (Sophos Intercept X)
Sophos Benelux
 
Asynchronous processing with PHP and Symfony2. Do it simple
Asynchronous processing with PHP and Symfony2. Do it simpleAsynchronous processing with PHP and Symfony2. Do it simple
Asynchronous processing with PHP and Symfony2. Do it simple
Kirill Chebunin
 
Integrating RabbitMQ with PHP
Integrating RabbitMQ with PHPIntegrating RabbitMQ with PHP
Integrating RabbitMQ with PHP
Alvaro Videla
 
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK MeetupScaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Kacper Gunia
 
Interoperability With RabbitMq
Interoperability With RabbitMqInteroperability With RabbitMq
Interoperability With RabbitMq
Alvaro Videla
 
深入了解Redis
深入了解Redis深入了解Redis
深入了解Redis
iammutex
 
Software Architectures, Week 4 - Message-based Architectures, Message Bus
Software Architectures, Week 4 - Message-based Architectures, Message BusSoftware Architectures, Week 4 - Message-based Architectures, Message Bus
Software Architectures, Week 4 - Message-based Architectures, Message Bus
Angelos Kapsimanis
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfony
Alvaro Videla
 
Telephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBTelephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDB
Mark Atwood
 
Taste Rabbitmq
Taste RabbitmqTaste Rabbitmq
Taste Rabbitmq
jeff kit
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战
mysqlops
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redis
paitoubing
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现
iammutex
 
Introduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsIntroduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal Labs
Alvaro Videla
 
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRFOWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
Paul Mooney
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven Architecture
Chris Patterson
 
Sophos Day Belgium - This is Next-Gen IT Security (Sophos Intercept X)
Sophos Day Belgium - This is Next-Gen IT Security (Sophos Intercept X)Sophos Day Belgium - This is Next-Gen IT Security (Sophos Intercept X)
Sophos Day Belgium - This is Next-Gen IT Security (Sophos Intercept X)
Sophos Benelux
 
Asynchronous processing with PHP and Symfony2. Do it simple
Asynchronous processing with PHP and Symfony2. Do it simpleAsynchronous processing with PHP and Symfony2. Do it simple
Asynchronous processing with PHP and Symfony2. Do it simple
Kirill Chebunin
 
Integrating RabbitMQ with PHP
Integrating RabbitMQ with PHPIntegrating RabbitMQ with PHP
Integrating RabbitMQ with PHP
Alvaro Videla
 
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK MeetupScaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Kacper Gunia
 
Interoperability With RabbitMq
Interoperability With RabbitMqInteroperability With RabbitMq
Interoperability With RabbitMq
Alvaro Videla
 
深入了解Redis
深入了解Redis深入了解Redis
深入了解Redis
iammutex
 
Ad

Similar to Scaling applications with RabbitMQ at SunshinePHP (20)

Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Ontico
 
Alvaro Videla, Pivotal, Inc.
Alvaro Videla, Pivotal, Inc.Alvaro Videla, Pivotal, Inc.
Alvaro Videla, Pivotal, Inc.
Ontico
 
Message queueing
Message queueingMessage queueing
Message queueing
Richard Jones
 
Message Queuing - Gearman, Mosquitto, Kafka and RabbitMQ
Message Queuing - Gearman, Mosquitto, Kafka and RabbitMQMessage Queuing - Gearman, Mosquitto, Kafka and RabbitMQ
Message Queuing - Gearman, Mosquitto, Kafka and RabbitMQ
Marian Marinov
 
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
James Titcumb
 
Follow the White Rabbit - Message Queues with PHP
Follow the White Rabbit - Message Queues with PHPFollow the White Rabbit - Message Queues with PHP
Follow the White Rabbit - Message Queues with PHP
Eric Rodriguez (Hiring in Lex)
 
Messaging, interoperability and log aggregation - a new framework
Messaging, interoperability and log aggregation - a new frameworkMessaging, interoperability and log aggregation - a new framework
Messaging, interoperability and log aggregation - a new framework
Tomas Doran
 
Message Queueing - by an MQ noob
Message Queueing - by an MQ noobMessage Queueing - by an MQ noob
Message Queueing - by an MQ noob
Richard Jones
 
Building scalable flexible messaging systems using qpid
Building scalable flexible messaging systems using qpidBuilding scalable flexible messaging systems using qpid
Building scalable flexible messaging systems using qpid
Jack Gibson
 
Vert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingVert.x – The problem of real-time data binding
Vert.x – The problem of real-time data binding
Alex Derkach
 
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQFEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
Alexandre Brandão Lustosa
 
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory LiteScaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Alvaro Videla
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshop
loodse
 
Lindsay distributed geventzmq
Lindsay distributed geventzmqLindsay distributed geventzmq
Lindsay distributed geventzmq
Robin Xiao
 
About Clack
About ClackAbout Clack
About Clack
fukamachi
 
NullMQ @ PDX
NullMQ @ PDXNullMQ @ PDX
NullMQ @ PDX
Jeff Lindsay
 
Enterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfEnterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdf
Ortus Solutions, Corp
 
2021.laravelconf.tw.slides1
2021.laravelconf.tw.slides12021.laravelconf.tw.slides1
2021.laravelconf.tw.slides1
LiviaLiaoFontech
 
London devops logging
London devops loggingLondon devops logging
London devops logging
Tomas Doran
 
Ruby Microservices with RabbitMQ
Ruby Microservices with RabbitMQRuby Microservices with RabbitMQ
Ruby Microservices with RabbitMQ
Zoran Majstorovic
 
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Ontico
 
Alvaro Videla, Pivotal, Inc.
Alvaro Videla, Pivotal, Inc.Alvaro Videla, Pivotal, Inc.
Alvaro Videla, Pivotal, Inc.
Ontico
 
Message Queuing - Gearman, Mosquitto, Kafka and RabbitMQ
Message Queuing - Gearman, Mosquitto, Kafka and RabbitMQMessage Queuing - Gearman, Mosquitto, Kafka and RabbitMQ
Message Queuing - Gearman, Mosquitto, Kafka and RabbitMQ
Marian Marinov
 
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
James Titcumb
 
Messaging, interoperability and log aggregation - a new framework
Messaging, interoperability and log aggregation - a new frameworkMessaging, interoperability and log aggregation - a new framework
Messaging, interoperability and log aggregation - a new framework
Tomas Doran
 
Message Queueing - by an MQ noob
Message Queueing - by an MQ noobMessage Queueing - by an MQ noob
Message Queueing - by an MQ noob
Richard Jones
 
Building scalable flexible messaging systems using qpid
Building scalable flexible messaging systems using qpidBuilding scalable flexible messaging systems using qpid
Building scalable flexible messaging systems using qpid
Jack Gibson
 
Vert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingVert.x – The problem of real-time data binding
Vert.x – The problem of real-time data binding
Alex Derkach
 
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQFEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
Alexandre Brandão Lustosa
 
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory LiteScaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Alvaro Videla
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshop
loodse
 
Lindsay distributed geventzmq
Lindsay distributed geventzmqLindsay distributed geventzmq
Lindsay distributed geventzmq
Robin Xiao
 
Enterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfEnterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdf
Ortus Solutions, Corp
 
2021.laravelconf.tw.slides1
2021.laravelconf.tw.slides12021.laravelconf.tw.slides1
2021.laravelconf.tw.slides1
LiviaLiaoFontech
 
London devops logging
London devops loggingLondon devops logging
London devops logging
Tomas Doran
 
Ruby Microservices with RabbitMQ
Ruby Microservices with RabbitMQRuby Microservices with RabbitMQ
Ruby Microservices with RabbitMQ
Zoran Majstorovic
 
Ad

More from Alvaro Videla (16)

Data Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring IntegrationData Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring Integration
Alvaro Videla
 
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveUnit Test + Functional Programming = Love
Unit Test + Functional Programming = Love
Alvaro Videla
 
Writing testable code
Writing testable codeWriting testable code
Writing testable code
Alvaro Videla
 
RabbitMQ Hands On
RabbitMQ Hands OnRabbitMQ Hands On
RabbitMQ Hands On
Alvaro Videla
 
Rabbitmq Boot System
Rabbitmq Boot SystemRabbitmq Boot System
Rabbitmq Boot System
Alvaro Videla
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
Alvaro Videla
 
Cloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryCloud Messaging With Cloud Foundry
Cloud Messaging With Cloud Foundry
Alvaro Videla
 
Taming the rabbit
Taming the rabbitTaming the rabbit
Taming the rabbit
Alvaro Videla
 
Vertx
VertxVertx
Vertx
Alvaro Videla
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
Alvaro Videla
 
Desacoplando aplicaciones
Desacoplando aplicacionesDesacoplando aplicaciones
Desacoplando aplicaciones
Alvaro Videla
 
Messaging patterns
Messaging patternsMessaging patterns
Messaging patterns
Alvaro Videla
 
Integrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconIntegrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendcon
Alvaro Videla
 
Scaling webappswithrabbitmq
Scaling webappswithrabbitmqScaling webappswithrabbitmq
Scaling webappswithrabbitmq
Alvaro Videla
 
Integrating Erlang with PHP
Integrating Erlang with PHPIntegrating Erlang with PHP
Integrating Erlang with PHP
Alvaro Videla
 
Debugging and Profiling Symfony Apps
Debugging and Profiling Symfony AppsDebugging and Profiling Symfony Apps
Debugging and Profiling Symfony Apps
Alvaro Videla
 
Data Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring IntegrationData Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring Integration
Alvaro Videla
 
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveUnit Test + Functional Programming = Love
Unit Test + Functional Programming = Love
Alvaro Videla
 
Writing testable code
Writing testable codeWriting testable code
Writing testable code
Alvaro Videla
 
Rabbitmq Boot System
Rabbitmq Boot SystemRabbitmq Boot System
Rabbitmq Boot System
Alvaro Videla
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
Alvaro Videla
 
Cloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryCloud Messaging With Cloud Foundry
Cloud Messaging With Cloud Foundry
Alvaro Videla
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
Alvaro Videla
 
Desacoplando aplicaciones
Desacoplando aplicacionesDesacoplando aplicaciones
Desacoplando aplicaciones
Alvaro Videla
 
Integrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconIntegrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendcon
Alvaro Videla
 
Scaling webappswithrabbitmq
Scaling webappswithrabbitmqScaling webappswithrabbitmq
Scaling webappswithrabbitmq
Alvaro Videla
 
Integrating Erlang with PHP
Integrating Erlang with PHPIntegrating Erlang with PHP
Integrating Erlang with PHP
Alvaro Videla
 
Debugging and Profiling Symfony Apps
Debugging and Profiling Symfony AppsDebugging and Profiling Symfony Apps
Debugging and Profiling Symfony Apps
Alvaro Videla
 

Recently uploaded (20)

Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 

Scaling applications with RabbitMQ at SunshinePHP