rabbitmq hands on
DESCRIPTION
Talk given at PHPUK 13. The Pub/Sub Pattern image form slide 51 is taken from here: http://www.eaipatterns.com/PublishSubscribeChannel.htmlTRANSCRIPT
![Page 1: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/1.jpg)
RabbitMQ Hands On
Álvaro Videla - VMware
Monday, February 25, 13
![Page 2: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/2.jpg)
About Me• Developer Advocate for Cloud Foundry
• Blog: http://videlalvaro.github.com/
• Twitter: @old_sound
Monday, February 25, 13
![Page 3: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/3.jpg)
About Me• Developer Advocate for Cloud Foundry
• Blog: http://videlalvaro.github.com/
• Twitter: @old_sound
• I created gifsockets™
Monday, February 25, 13
![Page 4: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/4.jpg)
About Me
Co-authored
RabbitMQ in Action
http://bit.ly/rabbitmq
Monday, February 25, 13
![Page 5: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/5.jpg)
Why do you need messaging?
Monday, February 25, 13
![Page 6: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/6.jpg)
Classic Web Apps
Monday, February 25, 13
![Page 7: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/7.jpg)
Implement a Photo Gallery
Monday, February 25, 13
![Page 8: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/8.jpg)
Two Parts:
Monday, February 25, 13
![Page 9: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/9.jpg)
Pretty Simple
Monday, February 25, 13
![Page 10: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/10.jpg)
‘Till new requirements arrive
Monday, February 25, 13
![Page 11: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/11.jpg)
The Product Owner
Monday, February 25, 13
![Page 12: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/12.jpg)
Can we also notify the user friends when she uploads a new image?
Monday, February 25, 13
![Page 13: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/13.jpg)
Can we also notify the user friends when she uploads a new image?
I forgot to mention we need it for tomorrow…
Monday, February 25, 13
![Page 14: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/14.jpg)
Monday, February 25, 13
![Page 15: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/15.jpg)
The Social Media Guru
Monday, February 25, 13
![Page 16: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/16.jpg)
We need to give badges to users for each picture upload
Monday, February 25, 13
![Page 17: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/17.jpg)
We need to give badges to users for each picture upload
and post uploads to Twitter
Monday, February 25, 13
![Page 18: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/18.jpg)
Monday, February 25, 13
![Page 19: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/19.jpg)
The Sysadmin
Monday, February 25, 13
![Page 20: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/20.jpg)
Dumb! You’re delivering full size images!
The bandwidth bill has tripled!
Monday, February 25, 13
![Page 21: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/21.jpg)
Dumb! You’re delivering full size images!
The bandwidth bill has tripled!
We need this fixed for yesterday!
Monday, February 25, 13
![Page 22: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/22.jpg)
Monday, February 25, 13
![Page 23: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/23.jpg)
The Developer in the other team
Monday, February 25, 13
![Page 24: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/24.jpg)
I need to call your PHP stuff but from Python
Monday, February 25, 13
![Page 25: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/25.jpg)
I need to call your PHP stuff but from Python
And also Java starting next week
Monday, February 25, 13
![Page 26: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/26.jpg)
Monday, February 25, 13
![Page 27: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/27.jpg)
The User
Monday, February 25, 13
![Page 28: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/28.jpg)
I don’t want to waittill your app resizes
my image!
Monday, February 25, 13
![Page 29: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/29.jpg)
You
Monday, February 25, 13
![Page 30: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/30.jpg)
Monday, February 25, 13
![Page 31: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/31.jpg)
Let’s see the code evolution
Monday, February 25, 13
![Page 32: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/32.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Comments
Monday, February 25, 13
![Page 33: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/33.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Function Name
Monday, February 25, 13
![Page 34: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/34.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Arguments
Monday, February 25, 13
![Page 35: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/35.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Function Body
Monday, February 25, 13
![Page 36: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/36.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Return Value
Monday, February 25, 13
![Page 37: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/37.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
First Implementation:
Monday, February 25, 13
![Page 38: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/38.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),ok.
Second Implementation:
Monday, February 25, 13
![Page 39: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/39.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),notify_friends(ReqData:get_user()),ok.
Third Implementation:
Monday, February 25, 13
![Page 40: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/40.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),notify_friends(ReqData:get_user()),add_points_to_user(ReqData:get_user()),ok.
Fourth Implementation:
Monday, February 25, 13
![Page 41: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/41.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),notify_friends(ReqData:get_user()),add_points_to_user(ReqData:get_user()),tweet_new_image(User, Image),ok.
Final Implementation:
Monday, February 25, 13
![Page 42: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/42.jpg)
Can our code scale to new requirements?
Monday, February 25, 13
![Page 43: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/43.jpg)
What if
Monday, February 25, 13
![Page 44: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/44.jpg)
• We need to speed up image conversion
What if
Monday, February 25, 13
![Page 45: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/45.jpg)
• We need to speed up image conversion• User notifications sent by email
What if
Monday, February 25, 13
![Page 46: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/46.jpg)
• We need to speed up image conversion• User notifications sent by email• Stop tweeting about new images
What if
Monday, February 25, 13
![Page 47: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/47.jpg)
• We need to speed up image conversion• User notifications sent by email• Stop tweeting about new images• Resize in different formats
What if
Monday, February 25, 13
![Page 48: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/48.jpg)
• We need to speed up image conversion• User notifications sent by email• Stop tweeting about new images• Resize in different formats• Swap Language / Technology (No Down
Time)
What if
Monday, February 25, 13
![Page 49: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/49.jpg)
Can we do better?
Monday, February 25, 13
![Page 50: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/50.jpg)
Sure.Using messaging
Monday, February 25, 13
![Page 51: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/51.jpg)
DesignPublish / Subscribe Pattern
Monday, February 25, 13
![Page 52: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/52.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()),Msg = #msg{user = ReqData:get_user(), image = Image},publish_message('new_image', Msg).
First Implementation:
Monday, February 25, 13
![Page 53: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/53.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()),Msg = #msg{user = ReqData:get_user(), image = Image},publish_message('new_image', Msg).
First Implementation:
%% friends notifieron('new_image', Msg) ->notify_friends(Msg.user, Msg.image).
Monday, February 25, 13
![Page 54: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/54.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()),Msg = #msg{user = ReqData:get_user(), image = Image},publish_message('new_image', Msg).
First Implementation:
%% friends notifieron('new_image', Msg) ->notify_friends(Msg.user, Msg.image).
%% points manageron('new_image', Msg) ->add_points(Msg.user, 'new_image').
Monday, February 25, 13
![Page 55: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/55.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()),Msg = #msg{user = ReqData:get_user(), image = Image},publish_message('new_image', Msg).
First Implementation:
%% friends notifieron('new_image', Msg) ->notify_friends(Msg.user, Msg.image).
%% points manageron('new_image', Msg) ->add_points(Msg.user, 'new_image').
%% resizeron('new_image', Msg) ->resize_image(Msg.image).
Monday, February 25, 13
![Page 56: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/56.jpg)
Second Implementation:
Monday, February 25, 13
![Page 57: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/57.jpg)
Second Implementation:
THIS PAGE INTENTIONALLY LEFT BLANK
Monday, February 25, 13
![Page 58: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/58.jpg)
Monday, February 25, 13
![Page 59: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/59.jpg)
Messaging and RabbitMQ
Monday, February 25, 13
![Page 60: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/60.jpg)
RabbitMQ
Monday, February 25, 13
![Page 61: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/61.jpg)
RabbitMQ
• Multi Protocol Messaging Server
Monday, February 25, 13
![Page 62: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/62.jpg)
RabbitMQ
• Multi Protocol Messaging Server• Open Source (MPL)
Monday, February 25, 13
![Page 63: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/63.jpg)
RabbitMQ
• Multi Protocol Messaging Server• Open Source (MPL)• Part of Spring Source
Monday, February 25, 13
![Page 64: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/64.jpg)
RabbitMQ
• Polyglot• Multi Protocol• Open Source (MPL)• Written in Erlang/OTP
Monday, February 25, 13
![Page 65: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/65.jpg)
Multi Protocol
http://bit.ly/rmq-protocols
Monday, February 25, 13
![Page 66: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/66.jpg)
Polyglot
• PHP• node.js• Erlang• Java• Ruby• .Net• Haskell
Monday, February 25, 13
![Page 68: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/68.jpg)
CODE OR IT DIDN’T HAPPEN
http://github.com/videlalvaro/php-amqplib
Monday, February 25, 13
![Page 69: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/69.jpg)
Messaging
Monday, February 25, 13
![Page 70: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/70.jpg)
Messaging
Scale
Monday, February 25, 13
![Page 71: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/71.jpg)
Messaging
DecouplingScale
Monday, February 25, 13
![Page 72: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/72.jpg)
Messaging
DecouplingScale
Polyglot Apps
Monday, February 25, 13
![Page 73: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/73.jpg)
Questions?
Monday, February 25, 13
![Page 74: RabbitMQ Hands On](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54c8bb974a7959012a8b4587/html5/thumbnails/74.jpg)
Thanks!@old_sound
Monday, February 25, 13