Introduction to RabbitMQ | Meetup at Pivotal Labs
Upcoming SlideShare
Loading in...5
×
 

Introduction to RabbitMQ | Meetup at Pivotal Labs

on

  • 2,120 views

The Pub/Sub Pattern image form slide 51 is taken from here: http://www.eaipatterns.com/PublishSubscribeChannel.html

The Pub/Sub Pattern image form slide 51 is taken from here: http://www.eaipatterns.com/PublishSubscribeChannel.html

Statistics

Views

Total Views
2,120
Views on SlideShare
2,101
Embed Views
19

Actions

Likes
4
Downloads
52
Comments
0

1 Embed 19

https://twitter.com 19

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Introduction to RabbitMQ | Meetup at Pivotal Labs Introduction to RabbitMQ | Meetup at Pivotal Labs Presentation Transcript

  • Introduction to RabbitMQ AlvaroVidela - Pivotal / RabbitMQ Friday, September 13, 13
  • AlvaroVidela • 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 | avidela@gopivotal.com github.com/videlalvaro Friday, September 13, 13
  • About Me Co-authored RabbitMQ in Action http://bit.ly/rabbitmq Friday, September 13, 13
  • Why do we need messaging? Friday, September 13, 13
  • Classic Web Apps Friday, September 13, 13
  • Implement a Photo Gallery Friday, September 13, 13
  • Two Parts: Friday, September 13, 13
  • Pretty Simple Friday, September 13, 13
  • ‘Till new requirements arrive Friday, September 13, 13
  • The Product Owner Friday, September 13, 13
  • Can we also notify the user friends when she uploads a new image? Friday, September 13, 13
  • Can we also notify the user friends when she uploads a new image? I forgot to mention we need it for tomorrow… Friday, September 13, 13
  • The Social Media Guru Friday, September 13, 13
  • We need to give badges to users for each picture upload Friday, September 13, 13
  • We need to give badges to users for each picture upload and post uploads to Twitter Friday, September 13, 13
  • The Sysadmin Friday, September 13, 13
  • Dumb!You’re delivering full size images! The bandwidth bill has tripled! Friday, September 13, 13
  • Dumb!You’re delivering full size images! The bandwidth bill has tripled! We need this fixed for yesterday! Friday, September 13, 13
  • The Developer in the other team Friday, September 13, 13
  • I need to call your Java stuff but from Python Friday, September 13, 13
  • I need to call your Java stuff but from Python And also PHP starting next week Friday, September 13, 13
  • The User Friday, September 13, 13
  • I don’t want to wait till your app resizes my image! Friday, September 13, 13
  • You Friday, September 13, 13
  • (╯°□°)╯︵ ┻━┻ Friday, September 13, 13
  • Let’s see the code evolution Friday, September 13, 13
  • %% image_controller handle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok. Pseudo Code Comments Friday, September 13, 13
  • %% image_controller handle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok. Pseudo Code Function Name Friday, September 13, 13
  • %% image_controller handle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok. Pseudo Code Arguments Friday, September 13, 13
  • %% image_controller handle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok. Pseudo Code Function Body Friday, September 13, 13
  • %% image_controller handle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok. Pseudo Code ReturnValue Friday, September 13, 13
  • %% image_controller handle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok. First Implementation: Friday, September 13, 13
  • %% image_controller handle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image), ok. Second Implementation: Friday, September 13, 13
  • %% image_controller handle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image), notify_friends(ReqData:get_user()), ok. Third Implementation: Friday, September 13, 13
  • %% image_controller handle('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: Friday, September 13, 13
  • %% image_controller handle('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: Friday, September 13, 13
  • Can our code scale to new requirements? Friday, September 13, 13
  • What if Friday, September 13, 13
  • • We need to speed up image conversion What if Friday, September 13, 13
  • • We need to speed up image conversion • User notifications sent by email What if Friday, September 13, 13
  • • We need to speed up image conversion • User notifications sent by email • Stop tweeting about new images What if Friday, September 13, 13
  • • We need to speed up image conversion • User notifications sent by email • Stop tweeting about new images • Resize in different formats What if Friday, September 13, 13
  • • 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 Friday, September 13, 13
  • Can we do better? Friday, September 13, 13
  • Sure. Using messaging Friday, September 13, 13
  • Design Publish / Subscribe Pattern Friday, September 13, 13
  • %% image_controller handle('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: Friday, September 13, 13
  • %% image_controller handle('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 notifier on('new_image', Msg) -> notify_friends(Msg.user, Msg.image). Friday, September 13, 13
  • %% image_controller handle('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 notifier on('new_image', Msg) -> notify_friends(Msg.user, Msg.image). %% points manager on('new_image', Msg) -> add_points(Msg.user, 'new_image'). Friday, September 13, 13
  • %% image_controller handle('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 notifier on('new_image', Msg) -> notify_friends(Msg.user, Msg.image). %% points manager on('new_image', Msg) -> add_points(Msg.user, 'new_image'). %% resizer on('new_image', Msg) -> resize_image(Msg.image). Friday, September 13, 13
  • Second Implementation: Friday, September 13, 13
  • Second Implementation: THIS PAGE INTENTIONALLY LEFT BLANK Friday, September 13, 13
  • What is RabbitMQ Friday, September 13, 13
  • RabbitMQ Friday, September 13, 13
  • RabbitMQ • Multi Protocol Messaging Server Friday, September 13, 13
  • RabbitMQ • Multi Protocol Messaging Server • Open Source (MPL) Friday, September 13, 13
  • RabbitMQ • Multi Protocol Messaging Server • Open Source (MPL) • Polyglot Friday, September 13, 13
  • RabbitMQ • Multi Protocol Messaging Server • Open Source (MPL) • Polyglot • Written in Erlang/OTP Friday, September 13, 13
  • Multi Protocol http://bit.ly/rmq-protocols Friday, September 13, 13
  • Polyglot Friday, September 13, 13
  • Polyglot • Java Friday, September 13, 13
  • Polyglot • Java • node.js Friday, September 13, 13
  • Polyglot • Java • node.js • Erlang Friday, September 13, 13
  • Polyglot • Java • node.js • Erlang • PHP Friday, September 13, 13
  • Polyglot • Java • node.js • Erlang • PHP • Ruby Friday, September 13, 13
  • Polyglot • Java • node.js • Erlang • PHP • Ruby • .Net Friday, September 13, 13
  • Polyglot • Java • node.js • Erlang • PHP • Ruby • .Net • Haskell Friday, September 13, 13
  • Polyglot Even COBOL!!!11 Friday, September 13, 13
  • Some users of RabbitMQ Friday, September 13, 13
  • Some users of RabbitMQ • Instagram Friday, September 13, 13
  • Some users of RabbitMQ • Instagram • Indeed.com Friday, September 13, 13
  • Some users of RabbitMQ • Instagram • Indeed.com • MailboxApp Friday, September 13, 13
  • Some users of RabbitMQ • Instagram • Indeed.com • MailboxApp • Mercado Libre Friday, September 13, 13
  • Friday, September 13, 13
  • Messaging with RabbitMQ A demo with the RabbitMQ Simulator https://github.com/RabbitMQSimulator/RabbitMQSimulator Friday, September 13, 13
  • Thanks AlvaroVidela - @old_sound Friday, September 13, 13