SlideShare a Scribd company logo
1 of 149
Download to read offline
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

More Related Content

What's hot

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 RabbitMQNahidul Kibria
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQJames 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 itMichael Klishin
 
RabbitMQ Model and Some Example Applications
RabbitMQ Model and Some Example ApplicationsRabbitMQ Model and Some Example Applications
RabbitMQ Model and Some Example ApplicationsHoucheng 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 PatternsJavier Arias Losada
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQAll Things Open
 
Messaging with RabbitMQ and AMQP
Messaging with RabbitMQ and AMQPMessaging with RabbitMQ and AMQP
Messaging with RabbitMQ and AMQPEberhard Wolff
 
Improvements in RabbitMQ
Improvements in RabbitMQImprovements in RabbitMQ
Improvements in RabbitMQAlvaro Videla
 
RabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfRabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfAlvaro Videla
 
The RabbitMQ Message Broker
The RabbitMQ Message BrokerThe RabbitMQ Message Broker
The RabbitMQ Message BrokerMartin 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 WebinarErlang Solutions
 
RabbitMQ fairly-indepth
RabbitMQ fairly-indepthRabbitMQ fairly-indepth
RabbitMQ fairly-indepthWee Keat Chin
 
Introduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQIntroduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQDmitriy Samovskiy
 
Distributed messaging with AMQP
Distributed messaging with AMQPDistributed messaging with AMQP
Distributed messaging with AMQPWee 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 CrontabsPaolo Negri
 
Messaging with amqp and rabbitmq
Messaging with amqp and rabbitmqMessaging with amqp and rabbitmq
Messaging with amqp and rabbitmqSelasie Hanson
 

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
 
Scaling application with RabbitMQ
Scaling application with RabbitMQScaling application with RabbitMQ
Scaling application with RabbitMQ
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQ
 
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
 
RabbitMQ Operations
RabbitMQ OperationsRabbitMQ Operations
RabbitMQ Operations
 
RabbitMQ Model and Some Example Applications
RabbitMQ Model and Some Example ApplicationsRabbitMQ Model and Some Example Applications
RabbitMQ Model and Some Example Applications
 
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...
 
Rabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging PatternsRabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging Patterns
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQ
 
Messaging with RabbitMQ and AMQP
Messaging with RabbitMQ and AMQPMessaging with RabbitMQ and AMQP
Messaging with RabbitMQ and AMQP
 
Improvements in RabbitMQ
Improvements in RabbitMQImprovements in RabbitMQ
Improvements in RabbitMQ
 
RabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfRabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft Conf
 
The RabbitMQ Message Broker
The RabbitMQ Message BrokerThe RabbitMQ Message Broker
The RabbitMQ Message Broker
 
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
 
RabbitMQ fairly-indepth
RabbitMQ fairly-indepthRabbitMQ fairly-indepth
RabbitMQ fairly-indepth
 
Spring RabbitMQ
Spring RabbitMQSpring RabbitMQ
Spring RabbitMQ
 
Introduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQIntroduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQ
 
Distributed messaging with AMQP
Distributed messaging with AMQPDistributed messaging with AMQP
Distributed messaging with AMQP
 
%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
 
Messaging with amqp and rabbitmq
Messaging with amqp and rabbitmqMessaging with amqp and rabbitmq
Messaging with amqp and rabbitmq
 

Viewers also liked

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 BusAngelos Kapsimanis
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfonyAlvaro Videla
 
Telephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBTelephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBMark Atwood
 
Taste Rabbitmq
Taste RabbitmqTaste Rabbitmq
Taste Rabbitmqjeff kit
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战mysqlops
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redispaitoubing
 
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 LabsAlvaro 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 & CSRFPaul Mooney
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven ArchitectureChris 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 simpleKirill Chebunin
 
Integrating RabbitMQ with PHP
Integrating RabbitMQ with PHPIntegrating RabbitMQ with PHP
Integrating RabbitMQ with PHPAlvaro 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 MeetupKacper Gunia
 
Interoperability With RabbitMq
Interoperability With RabbitMqInteroperability With RabbitMq
Interoperability With RabbitMqAlvaro Videla
 
深入了解Redis
深入了解Redis深入了解Redis
深入了解Redisiammutex
 

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
 
Juc boston2014.pptx
Juc boston2014.pptxJuc boston2014.pptx
Juc boston2014.pptx
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfony
 
Telephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBTelephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDB
 
Taste Rabbitmq
Taste RabbitmqTaste Rabbitmq
Taste Rabbitmq
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redis
 
Working with Asynchronous Events
Working with Asynchronous EventsWorking with Asynchronous Events
Working with Asynchronous Events
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现
 
Redis介绍
Redis介绍Redis介绍
Redis介绍
 
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
 
RabbitMQ Messaging
RabbitMQ MessagingRabbitMQ Messaging
RabbitMQ Messaging
 
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
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven Architecture
 
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)
 
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
 
Integrating RabbitMQ with PHP
Integrating RabbitMQ with PHPIntegrating RabbitMQ with PHP
Integrating RabbitMQ with PHP
 
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
 
Interoperability With RabbitMq
Interoperability With RabbitMqInteroperability With RabbitMq
Interoperability With RabbitMq
 
深入了解Redis
深入了解Redis深入了解Redis
深入了解Redis
 

Similar to Scaling applications with RabbitMQ at SunshinePHP

Построение распределенной системы сбора данных с помощью 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 RabbitMQMarian 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 frameworkTomas Doran
 
Message Queueing - by an MQ noob
Message Queueing - by an MQ noobMessage Queueing - by an MQ noob
Message Queueing - by an MQ noobRichard 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 qpidJack 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 bindingAlex 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 RabbitMQAlexandre 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 LiteAlvaro Videla
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshoploodse
 
Lindsay distributed geventzmq
Lindsay distributed geventzmqLindsay distributed geventzmq
Lindsay distributed geventzmqRobin Xiao
 
Enterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfEnterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfOrtus Solutions, Corp
 
2021.laravelconf.tw.slides1
2021.laravelconf.tw.slides12021.laravelconf.tw.slides1
2021.laravelconf.tw.slides1LiviaLiaoFontech
 
London devops logging
London devops loggingLondon devops logging
London devops loggingTomas Doran
 
Ruby Microservices with RabbitMQ
Ruby Microservices with RabbitMQRuby Microservices with RabbitMQ
Ruby Microservices with RabbitMQZoran Majstorovic
 

Similar to Scaling applications with RabbitMQ at SunshinePHP (20)

Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
 
Alvaro Videla, Pivotal, Inc.
Alvaro Videla, Pivotal, Inc.Alvaro Videla, Pivotal, Inc.
Alvaro Videla, Pivotal, Inc.
 
Message queueing
Message queueingMessage queueing
Message queueing
 
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
 
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)
 
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
 
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
 
Message Queueing - by an MQ noob
Message Queueing - by an MQ noobMessage Queueing - by an MQ noob
Message Queueing - by an MQ noob
 
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
 
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
 
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
 
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
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshop
 
Lindsay distributed geventzmq
Lindsay distributed geventzmqLindsay distributed geventzmq
Lindsay distributed geventzmq
 
About Clack
About ClackAbout Clack
About Clack
 
NullMQ @ PDX
NullMQ @ PDXNullMQ @ PDX
NullMQ @ PDX
 
Enterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfEnterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdf
 
2021.laravelconf.tw.slides1
2021.laravelconf.tw.slides12021.laravelconf.tw.slides1
2021.laravelconf.tw.slides1
 
London devops logging
London devops loggingLondon devops logging
London devops logging
 
Ruby Microservices with RabbitMQ
Ruby Microservices with RabbitMQRuby Microservices with RabbitMQ
Ruby Microservices with RabbitMQ
 

More from 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 IntegrationAlvaro Videla
 
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveUnit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveAlvaro Videla
 
Writing testable code
Writing testable codeWriting testable code
Writing testable codeAlvaro Videla
 
Rabbitmq Boot System
Rabbitmq Boot SystemRabbitmq Boot System
Rabbitmq Boot SystemAlvaro Videla
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry BootcampAlvaro Videla
 
Cloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryCloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryAlvaro Videla
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De TestearAlvaro Videla
 
Desacoplando aplicaciones
Desacoplando aplicacionesDesacoplando aplicaciones
Desacoplando aplicacionesAlvaro Videla
 
Integrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconIntegrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconAlvaro Videla
 
Scaling webappswithrabbitmq
Scaling webappswithrabbitmqScaling webappswithrabbitmq
Scaling webappswithrabbitmqAlvaro Videla
 
Integrating Erlang with PHP
Integrating Erlang with PHPIntegrating Erlang with PHP
Integrating Erlang with PHPAlvaro Videla
 
Debugging and Profiling Symfony Apps
Debugging and Profiling Symfony AppsDebugging and Profiling Symfony Apps
Debugging and Profiling Symfony AppsAlvaro Videla
 

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
 
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveUnit Test + Functional Programming = Love
Unit Test + Functional Programming = Love
 
Writing testable code
Writing testable codeWriting testable code
Writing testable code
 
RabbitMQ Hands On
RabbitMQ Hands OnRabbitMQ Hands On
RabbitMQ Hands On
 
Rabbitmq Boot System
Rabbitmq Boot SystemRabbitmq Boot System
Rabbitmq Boot System
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
 
Cloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryCloud Messaging With Cloud Foundry
Cloud Messaging With Cloud Foundry
 
Taming the rabbit
Taming the rabbitTaming the rabbit
Taming the rabbit
 
Vertx
VertxVertx
Vertx
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
 
Desacoplando aplicaciones
Desacoplando aplicacionesDesacoplando aplicaciones
Desacoplando aplicaciones
 
Messaging patterns
Messaging patternsMessaging patterns
Messaging patterns
 
Integrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconIntegrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendcon
 
Scaling webappswithrabbitmq
Scaling webappswithrabbitmqScaling webappswithrabbitmq
Scaling webappswithrabbitmq
 
Integrating Erlang with PHP
Integrating Erlang with PHPIntegrating Erlang with PHP
Integrating Erlang with PHP
 
Debugging and Profiling Symfony Apps
Debugging and Profiling Symfony AppsDebugging and Profiling Symfony Apps
Debugging and Profiling Symfony Apps
 

Recently uploaded

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Recently uploaded (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

Scaling applications with RabbitMQ at SunshinePHP