[フレーム]

Integrating php withrabbitmq_zendcon

56 likes16,565 views

This document summarizes Álvaro Videla's presentation on integrating PHP with RabbitMQ. It discusses how RabbitMQ and the AMQP protocol can help solve common problems developers face by allowing asynchronous messaging between different systems. Examples are given showing how RabbitMQ can be used for batch processing and distributing tasks, as well as uploading and processing images across different systems. Code samples are provided for a publisher and consumer in PHP to demonstrate integrating with RabbitMQ.

1 of 124
Downloaded 655 times
Integrating PHP With RabbitMQ ÁlvaroVidela | The NetCircle Zendcon 2010 Tuesday, November 2, 2010
Who? Tuesday, November 2, 2010
About Me • Development Manager at TheNetCircle.com • Writing "RabbitMQ in Action" for Manning • Blog: http://videlalvaro.github.com/ • Twitter: @old_sound Tuesday, November 2, 2010
Why Do I need RabbitMQ? Tuesday, November 2, 2010
The User Tuesday, November 2, 2010
I don’t want to wait till your app resizes my image! Tuesday, November 2, 2010
The Product Owner Tuesday, November 2, 2010
Can we also notify the user friends when she uploads a new image? Tuesday, November 2, 2010
Can we also notify the user friends when she uploads a new image? I forgot to mention we need it for tomorrow... Tuesday, November 2, 2010
The Sysadmin Tuesday, November 2, 2010
Dumb!You’re delivering full size images! The bandwidth bill has tripled! Tuesday, November 2, 2010
Dumb!You’re delivering full size images! The bandwidth bill has tripled! We need this fixed for yesterday! Tuesday, November 2, 2010
The Developer in the other team Tuesday, November 2, 2010
I need to call your PHP stuff but from Python Tuesday, November 2, 2010
I need to call your PHP stuff but from Python And also Java starting next week Tuesday, November 2, 2010
You Tuesday, November 2, 2010
FML! Tuesday, November 2, 2010
Is there a solution? Tuesday, November 2, 2010
RabbitMQ & AMQP Tuesday, November 2, 2010
AMQP Tuesday, November 2, 2010
AMQP • Advanced Message Queuing Protocol • Suits Interoperability • Completely Open Protocol • Binary Protocol • AMQP Model • AMQP Wire Format Tuesday, November 2, 2010
AMQP Model • Exchanges • Message Queues • Bindings • Rules for binding them Tuesday, November 2, 2010
AMQP Wire Protocol • Functional Layer • Transport Layer Tuesday, November 2, 2010
Message Flow http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Messaging_Tutorial/chap-Messaging_Tutorial-Initial_Concepts.html Tuesday, November 2, 2010
Exchange Types • Fanout • Direct • Topic Tuesday, November 2, 2010
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Messaging_Tutorial/sect-Messaging_Tutorial-Initial_Concepts- Fanout_Exchange.html Tuesday, November 2, 2010
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Messaging_Tutorial/sect-Messaging_Tutorial-Initial_Concepts- Direct_Exchange.html Tuesday, November 2, 2010
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Messaging_Tutorial/sect-Messaging_Tutorial-Initial_Concepts- Topic_Exchange.html Tuesday, November 2, 2010
Usage Scenarios Tuesday, November 2, 2010
Usage Scenarios • Batch Processing Tuesday, November 2, 2010
Usage Scenarios • Batch Processing • Image Uploading Tuesday, November 2, 2010
Usage Scenarios • Batch Processing • Image Uploading • Distributed Logging Tuesday, November 2, 2010
Scenario Batch Processing Tuesday, November 2, 2010
Requirements Tuesday, November 2, 2010
Requirements • Generate XML Tuesday, November 2, 2010
Requirements • Generate XML • Distribution Over a Cluster Tuesday, November 2, 2010
Requirements • Generate XML • Distribution Over a Cluster • Elasticity - Add/Remove new workers Tuesday, November 2, 2010
Requirements • Generate XML • Distribution Over a Cluster • Elasticity - Add/Remove new workers • No Code Changes Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
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(); Tuesday, November 2, 2010
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(); Tuesday, November 2, 2010
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(); Tuesday, November 2, 2010
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(); Tuesday, November 2, 2010
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(); Tuesday, November 2, 2010
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(); Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
Scenario Upload Pictures Tuesday, November 2, 2010
Requirements Tuesday, November 2, 2010
Requirements • Upload Picture Tuesday, November 2, 2010
Requirements • Upload Picture • Reward User Tuesday, November 2, 2010
Requirements • Upload Picture • Reward User • Notify User Friends Tuesday, November 2, 2010
Requirements • Upload Picture • Reward User • Notify User Friends • Resize Picture Tuesday, November 2, 2010
Requirements • Upload Picture • Reward User • Notify User Friends • Resize Picture • No Code Changes Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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(); } Tuesday, November 2, 2010
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']); }; Tuesday, November 2, 2010
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']); }; Tuesday, November 2, 2010
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']); }; Tuesday, November 2, 2010
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']); }; Tuesday, November 2, 2010
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']); }; Tuesday, November 2, 2010
Scenario Distributed Logging Tuesday, November 2, 2010
Requirements Tuesday, November 2, 2010
Requirements • Several Web Servers Tuesday, November 2, 2010
Requirements • Several Web Servers • Logic Separated by Module/Action Tuesday, November 2, 2010
Requirements • Several Web Servers • Logic Separated by Module/Action • Several Log Levels: Tuesday, November 2, 2010
Requirements • Several Web Servers • Logic Separated by Module/Action • Several Log Levels: • Info,Warning, Error Tuesday, November 2, 2010
Requirements • Several Web Servers • Logic Separated by Module/Action • Several Log Levels: • Info,Warning, Error • Add/Remove log listeners at will Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
Design Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
Consumer Code Get messages sent by host: server1 Tuesday, November 2, 2010
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.#'); Tuesday, November 2, 2010
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.#'); Tuesday, November 2, 2010
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.#'); Tuesday, November 2, 2010
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.#'); Tuesday, November 2, 2010
Consumer Code Get all error messages Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
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'); Tuesday, November 2, 2010
PHP Integration Tuesday, November 2, 2010
php-amqplib • http://github.com/tnc/php-amqplib Tuesday, November 2, 2010
php-amqplib • http://github.com/tnc/php-amqplib • Fork of http://code.google.com/p/php- amqplib/ Tuesday, November 2, 2010
php-amqplib • http://github.com/tnc/php-amqplib • Fork of http://code.google.com/p/php- amqplib/ • PHP 5.3 Compatible Tuesday, November 2, 2010
php-amqplib • http://github.com/tnc/php-amqplib • Fork of http://code.google.com/p/php- amqplib/ • PHP 5.3 Compatible • Improved performance Tuesday, November 2, 2010
php-amqplib • http://github.com/tnc/php-amqplib • Fork of http://code.google.com/p/php- amqplib/ • PHP 5.3 Compatible • Improved performance • Used in production one+ year Tuesday, November 2, 2010
php-amqplib $ git clone http://github.com/tnc/php-amqplib.git <?php require_once('./php-amqplib/amqp.inc'); $conn = new AMQPConnection(‘localhost’, 5672, guest, guest); $channel = $conn->channel(); ?> Tuesday, November 2, 2010
Why RabbitMQ? Tuesday, November 2, 2010
RabbitMQ • Enterprise Messaging System • Open Source MPL • Written in Erlang/OTP • Commercial Support Tuesday, November 2, 2010
Features • Reliable and High Scalable • Easy To install • Easy To Cluster • Runs on:Windows, Solaris, Linux, OSX • AMQP 0.8 - 0.9.1 Tuesday, November 2, 2010
Client Libraries • Java • .NET/C# • Erlang • Ruby, Python, PHP, Perl,AS3, Lisp, Scala, Clojure, Haskell Tuesday, November 2, 2010
Docs/Support • http://www.rabbitmq.com/documentation.html • http://dev.rabbitmq.com/wiki/ • #rabbitmq at irc.freenode.net • http://www.rabbitmq.com/email-archive.html Tuesday, November 2, 2010
One Setup for HA Tuesday, November 2, 2010
Conclusion Tuesday, November 2, 2010
Conclusion • Flexibility Tuesday, November 2, 2010
Conclusion • Flexibility • Scalability Tuesday, November 2, 2010
Conclusion • Flexibility • Scalability • Interoperability Tuesday, November 2, 2010
Conclusion • Flexibility • Scalability • Interoperability • Reduce Ops Tuesday, November 2, 2010
Questions? Tuesday, November 2, 2010
Thanks! Álvaro Videla http://twitter.com/old_sound http://github.com/videlalvaro http://github.com/tnc http://www.slideshare.net/old_sound Tuesday, November 2, 2010

More Related Content

Building Sencha Themes
PDF
Building Sencha Themes
Cleaner, Leaner, Meaner: Refactoring your jQuery
PDF
Cleaner, Leaner, Meaner: Refactoring your jQuery
Openstack 2013 1
PDF
Openstack 2013 1
Ext GWT 3.0 Theming and Appearances
PDF
Ext GWT 3.0 Theming and Appearances
Integrating RabbitMQ with PHP
PDF
Integrating RabbitMQ with PHP
Scaling webappswithrabbitmq
PDF
Scaling webappswithrabbitmq
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
PDF
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling applications with RabbitMQ at SunshinePHP
PDF
Scaling applications with RabbitMQ at SunshinePHP
Building Sencha Themes
Building Sencha Themes
Cleaner, Leaner, Meaner: Refactoring your jQuery
Cleaner, Leaner, Meaner: Refactoring your jQuery
Openstack 2013 1
Openstack 2013 1
Ext GWT 3.0 Theming and Appearances
Ext GWT 3.0 Theming and Appearances
Integrating RabbitMQ with PHP
Integrating RabbitMQ with PHP
Scaling webappswithrabbitmq
Scaling webappswithrabbitmq
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling applications with RabbitMQ at SunshinePHP
Scaling applications with RabbitMQ at SunshinePHP

Similar to Integrating php withrabbitmq_zendcon(20)

Theres a rabbit on my symfony
PDF
Theres a rabbit on my symfony
Scaling websites with RabbitMQ A(rlvaro Videla)
PDF
Scaling websites with RabbitMQ A(rlvaro Videla)
Follow the White Rabbit - Message Queues with PHP
PDF
Follow the White Rabbit - Message Queues with PHP
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
PDF
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
RabbitMQ 101 : How to cook the rabbit? - phptour 2016
PPTX
RabbitMQ 101 : How to cook the rabbit? - phptour 2016
Real time system_performance_mon
KEY
Real time system_performance_mon
Reducing load with RabbitMQ
PDF
Reducing load with RabbitMQ
Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff
PDF
Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff
Messaging Standards and Systems - AMQP & RabbitMQ
PDF
Messaging Standards and Systems - AMQP & RabbitMQ
RabbitMQ fairly-indepth
PDF
RabbitMQ fairly-indepth
PHP, RabbitMQ, and You
PDF
PHP, RabbitMQ, and You
RabbitMQ in PHP
PDF
RabbitMQ in PHP
f2f-overview1-presentation about rabbitmq and middleware
PPT
f2f-overview1-presentation about rabbitmq and middleware
f2f-overview12.ppt
PPT
f2f-overview12.ppt
RabbitMQ Protocol Essentials - Introduction for beginners
PPT
RabbitMQ Protocol Essentials - Introduction for beginners
-
Messaging Standards and Systems - AMQP & RabbitMQ
PDF
Messaging Standards and Systems - AMQP & RabbitMQ
The Art of Message Queues - TEKX
ODP
The Art of Message Queues - TEKX
Ruby Microservices with RabbitMQ
PDF
Ruby Microservices with RabbitMQ
Get Started with RabbitMQ (CoderCruise 2017)
PDF
Get Started with RabbitMQ (CoderCruise 2017)
High scale flavour
KEY
High scale flavour
Theres a rabbit on my symfony
Theres a rabbit on my symfony
Scaling websites with RabbitMQ A(rlvaro Videla)
Scaling websites with RabbitMQ A(rlvaro Videla)
Follow the White Rabbit - Message Queues with PHP
Follow the White Rabbit - Message Queues with PHP
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
Adding 1.21 Gigawatts to Applications with RabbitMQ (PHPNW Dec 2014 Meetup)
RabbitMQ 101 : How to cook the rabbit? - phptour 2016
RabbitMQ 101 : How to cook the rabbit? - phptour 2016
Real time system_performance_mon
Real time system_performance_mon
Reducing load with RabbitMQ
Reducing load with RabbitMQ
Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff
Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQ
RabbitMQ fairly-indepth
RabbitMQ fairly-indepth
PHP, RabbitMQ, and You
PHP, RabbitMQ, and You
RabbitMQ in PHP
RabbitMQ in PHP
f2f-overview1-presentation about rabbitmq and middleware
f2f-overview1-presentation about rabbitmq and middleware
f2f-overview12.ppt
f2f-overview12.ppt
RabbitMQ Protocol Essentials - Introduction for beginners
RabbitMQ Protocol Essentials - Introduction for beginners
-
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQ
The Art of Message Queues - TEKX
The Art of Message Queues - TEKX
Ruby Microservices with RabbitMQ
Ruby Microservices with RabbitMQ
Get Started with RabbitMQ (CoderCruise 2017)
Get Started with RabbitMQ (CoderCruise 2017)
High scale flavour
High scale flavour

More from Alvaro Videla(20)

Improvements in RabbitMQ
PDF
Improvements in RabbitMQ
Data Migration at Scale with RabbitMQ and Spring Integration
PDF
Data Migration at Scale with RabbitMQ and Spring Integration
RabbitMQ Data Ingestion at Craft Conf
PDF
RabbitMQ Data Ingestion at Craft Conf
Unit Test + Functional Programming = Love
PDF
Unit Test + Functional Programming = Love
RabbitMQ Data Ingestion
PDF
RabbitMQ Data Ingestion
Dissecting the rabbit: RabbitMQ Internal Architecture
PDF
Dissecting the rabbit: RabbitMQ Internal Architecture
Introduction to RabbitMQ | Meetup at Pivotal Labs
PDF
Introduction to RabbitMQ | Meetup at Pivotal Labs
Writing testable code
PDF
Writing testable code
RabbitMQ Hands On
PDF
RabbitMQ Hands On
Rabbitmq Boot System
PDF
Rabbitmq Boot System
Cloud Foundry Bootcamp
PDF
Cloud Foundry Bootcamp
Cloud Messaging With Cloud Foundry
PDF
Cloud Messaging With Cloud Foundry
Taming the rabbit
PDF
Taming the rabbit
Vertx
PDF
Código Fácil De Testear
PDF
Código Fácil De Testear
Desacoplando aplicaciones
PDF
Desacoplando aplicaciones
Messaging patterns
PDF
Messaging patterns
Integrating Erlang with PHP
PDF
Integrating Erlang with PHP
Interoperability With RabbitMq
PDF
Interoperability With RabbitMq
Debugging and Profiling Symfony Apps
PDF
Debugging and Profiling Symfony Apps
Improvements in RabbitMQ
Improvements in RabbitMQ
Data Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring Integration
RabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft Conf
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = Love
RabbitMQ Data Ingestion
RabbitMQ Data Ingestion
Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal Architecture
Introduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal Labs
Writing testable code
Writing testable code
RabbitMQ Hands On
RabbitMQ Hands On
Rabbitmq Boot System
Rabbitmq Boot System
Cloud Foundry Bootcamp
Cloud Foundry Bootcamp
Cloud Messaging With Cloud Foundry
Cloud Messaging With Cloud Foundry
Taming the rabbit
Taming the rabbit
Vertx
Código Fácil De Testear
Código Fácil De Testear
Desacoplando aplicaciones
Desacoplando aplicaciones
Messaging patterns
Messaging patterns
Integrating Erlang with PHP
Integrating Erlang with PHP
Interoperability With RabbitMq
Interoperability With RabbitMq
Debugging and Profiling Symfony Apps
Debugging and Profiling Symfony Apps

Recently uploaded(20)

Ignyte_ CMMC Webinar September 2025.pdf
PDF
Ignyte_ CMMC Webinar September 2025.pdf
Master the New ArcGIS Connector: Streamlined Data Management & Robust Metadata
PDF
Master the New ArcGIS Connector: Streamlined Data Management & Robust Metadata
An automatic social engagement measurement during human robot interaction
PDF
An automatic social engagement measurement during human robot interaction
HomiBhabha-B.Sc. - Business AI- Sem 1-Statistics Foundation with R- SLM.pdf
PDF
HomiBhabha-B.Sc. - Business AI- Sem 1-Statistics Foundation with R- SLM.pdf
302.AI vs. Azure OpenAI: The Pragmatic Engineer's Guide to Choosing an AI Pla...
PDF
302.AI vs. Azure OpenAI: The Pragmatic Engineer's Guide to Choosing an AI Pla...
SUPPLY CHAIN MANAGEMENT IN INDIAN AUTOMOTIVE INDUSTRY : COMPLEXITIES, CHALLEN...
PDF
SUPPLY CHAIN MANAGEMENT IN INDIAN AUTOMOTIVE INDUSTRY : COMPLEXITIES, CHALLEN...
Investigation on low-performance tuned-regressor of inhibitory concentration ...
PDF
Investigation on low-performance tuned-regressor of inhibitory concentration ...
Easy Python and AI Presentation (developed with AI)
PDF
Easy Python and AI Presentation (developed with AI)
Optimizing long short-term memory hyperparameter for cryptocurrency sentiment...
PDF
Optimizing long short-term memory hyperparameter for cryptocurrency sentiment...
September Patch Tuesday
PDF
September Patch Tuesday
MINI PROJECT REPORT ON BOOK STORE WEBSITE
PPTX
MINI PROJECT REPORT ON BOOK STORE WEBSITE
How to Transform Manufacturing with IIoT: A Step-by-Step Implementation Guide
PDF
How to Transform Manufacturing with IIoT: A Step-by-Step Implementation Guide
Introduction to Cyber Security (AI generated)
PDF
Introduction to Cyber Security (AI generated)
operating system,features ,types,examoles.pptx
PPTX
operating system,features ,types,examoles.pptx
Easily Add GenAI to .NET Apps using Microsoft.Extensions.AI
PPTX
Easily Add GenAI to .NET Apps using Microsoft.Extensions.AI
BET-BJH-TPX-Physiochemical-reading-material.pptx
PPTX
BET-BJH-TPX-Physiochemical-reading-material.pptx
TrustArc Webinar - Executive Perspectives on Data Privacy
PDF
TrustArc Webinar - Executive Perspectives on Data Privacy
Mastering ChatGPT Prompts for Faster, Smarter Output
PDF
Mastering ChatGPT Prompts for Faster, Smarter Output
Title-Waste Segregation Monitoring System for Urban Local Bodies
PPTX
Title-Waste Segregation Monitoring System for Urban Local Bodies
"Introduction to Enhancing Data Quality for AI Success," a Presentation from ...
PDF
"Introduction to Enhancing Data Quality for AI Success," a Presentation from ...
Ignyte_ CMMC Webinar September 2025.pdf
Ignyte_ CMMC Webinar September 2025.pdf
Master the New ArcGIS Connector: Streamlined Data Management & Robust Metadata
Master the New ArcGIS Connector: Streamlined Data Management & Robust Metadata
An automatic social engagement measurement during human robot interaction
An automatic social engagement measurement during human robot interaction
HomiBhabha-B.Sc. - Business AI- Sem 1-Statistics Foundation with R- SLM.pdf
HomiBhabha-B.Sc. - Business AI- Sem 1-Statistics Foundation with R- SLM.pdf
302.AI vs. Azure OpenAI: The Pragmatic Engineer's Guide to Choosing an AI Pla...
302.AI vs. Azure OpenAI: The Pragmatic Engineer's Guide to Choosing an AI Pla...
SUPPLY CHAIN MANAGEMENT IN INDIAN AUTOMOTIVE INDUSTRY : COMPLEXITIES, CHALLEN...
SUPPLY CHAIN MANAGEMENT IN INDIAN AUTOMOTIVE INDUSTRY : COMPLEXITIES, CHALLEN...
Investigation on low-performance tuned-regressor of inhibitory concentration ...
Investigation on low-performance tuned-regressor of inhibitory concentration ...
Easy Python and AI Presentation (developed with AI)
Easy Python and AI Presentation (developed with AI)
Optimizing long short-term memory hyperparameter for cryptocurrency sentiment...
Optimizing long short-term memory hyperparameter for cryptocurrency sentiment...
September Patch Tuesday
September Patch Tuesday
MINI PROJECT REPORT ON BOOK STORE WEBSITE
MINI PROJECT REPORT ON BOOK STORE WEBSITE
How to Transform Manufacturing with IIoT: A Step-by-Step Implementation Guide
How to Transform Manufacturing with IIoT: A Step-by-Step Implementation Guide
Introduction to Cyber Security (AI generated)
Introduction to Cyber Security (AI generated)
operating system,features ,types,examoles.pptx
operating system,features ,types,examoles.pptx
Easily Add GenAI to .NET Apps using Microsoft.Extensions.AI
Easily Add GenAI to .NET Apps using Microsoft.Extensions.AI
BET-BJH-TPX-Physiochemical-reading-material.pptx
BET-BJH-TPX-Physiochemical-reading-material.pptx
TrustArc Webinar - Executive Perspectives on Data Privacy
TrustArc Webinar - Executive Perspectives on Data Privacy
Mastering ChatGPT Prompts for Faster, Smarter Output
Mastering ChatGPT Prompts for Faster, Smarter Output
Title-Waste Segregation Monitoring System for Urban Local Bodies
Title-Waste Segregation Monitoring System for Urban Local Bodies
"Introduction to Enhancing Data Quality for AI Success," a Presentation from ...
"Introduction to Enhancing Data Quality for AI Success," a Presentation from ...

Integrating php withrabbitmq_zendcon

AltStyle によって変換されたページ (->オリジナル) /