2. About Me
• Developer Advocate for Cloud Foundry
• Blog: http://videlalvaro.github.com/
• Twitter: @old_sound
2
Tuesday, November 13, 12
3. About Me
• Developer Advocate for Cloud Foundry
• Blog: http://videlalvaro.github.com/
• Twitter: @old_sound
• I created gifsockets™
3
Tuesday, November 13, 12
4. About Me
Co-authored
RabbitMQ in Action
http://bit.ly/rabbitmq
4
Tuesday, November 13, 12
30. Let’s see the
code evolution
30
Tuesday, November 13, 12
31. Pseudo Code
Comments
%% image_controller
handle('PUT', "/user/image", ReqData) ->
image_handler:do_upload(ReqData:get_file()),
ok.
Tuesday, November 13, 12
32. Pseudo Code
Function Name
%% image_controller
handle('PUT', "/user/image", ReqData) ->
image_handler:do_upload(ReqData:get_file()),
ok.
Tuesday, November 13, 12
33. Pseudo Code
Arguments
%% image_controller
handle('PUT', "/user/image", ReqData) ->
image_handler:do_upload(ReqData:get_file()),
ok.
Tuesday, November 13, 12
34. Pseudo Code
Function Body
%% image_controller
handle('PUT', "/user/image", ReqData) ->
image_handler:do_upload(ReqData:get_file()),
ok.
Tuesday, November 13, 12
35. Pseudo Code
Return Value
%% image_controller
handle('PUT', "/user/image", ReqData) ->
image_handler:do_upload(ReqData:get_file()),
ok.
Tuesday, November 13, 12
36. First Implementation:
%% image_controller
handle('PUT', "/user/image", ReqData) ->
image_handler:do_upload(ReqData:get_file()),
ok.
Tuesday, November 13, 12
37. Second Implementation:
%% image_controller
handle('PUT', "/user/image", ReqData) ->
{ok, Image} = image_handler:do_upload(ReqData:get_file()),
resize_image(Image),
ok.
Tuesday, November 13, 12
38. Third Implementation:
%% 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.
Tuesday, November 13, 12
43. What if
• We need to speed up image conversion
43
Tuesday, November 13, 12
44. What if
• We need to speed up image conversion
• User notification has to be sent by email
44
Tuesday, November 13, 12
45. What if
• We need to speed up image conversion
• User notification has to be sent by email
• Stop tweeting about new images
45
Tuesday, November 13, 12
46. What if
• We need to speed up image conversion
• User notification has to be sent by email
• Stop tweeting about new images
• Resize in different formats
46
Tuesday, November 13, 12
47. What if
• We need to speed up image conversion
• User notification has to be sent by email
• Stop tweeting about new images
• Resize in different formats
• Swap Language / Technology
47
Tuesday, November 13, 12
48. What if
• We need to speed up image conversion
• User notification has to be sent by email
• Stop tweeting about new images
• Resize in different formats
• Swap Language / Technology (No Down Time)
48
Tuesday, November 13, 12
60. Messaging
• Share data across processes
60
Tuesday, November 13, 12
61. Messaging
• Share data across processes
• Processes can be part of different apps
61
Tuesday, November 13, 12
62. Messaging
• Share data across processes
• Processes can be part of different apps
• Apps can live in different machines
62
Tuesday, November 13, 12
63. Messaging
• Share data across processes
• Processes can be part of different apps
• Apps can live in different machines
• Communication is Asynchronous
63
Tuesday, November 13, 12
69. Why Cloud Foundry is
Good™
for Messaging?
69
Tuesday, November 13, 12
70. Key aspects of Cloud Foundry
70
Tuesday, November 13, 12
71. Key aspects of Cloud Foundry
• Supports many apps per account
71
Tuesday, November 13, 12
72. Key aspects of Cloud Foundry
• Supports many apps per account
• Supports many services per account
72
Tuesday, November 13, 12
73. Key aspects of Cloud Foundry
• Supports many apps per account
• Supports many services per account
• Services can be shared across apps
73
Tuesday, November 13, 12
74. Key aspects of Cloud Foundry
• Supports many apps per account
• Supports many services per account
• Services can be shared across apps
• Supports RabbitMQ by default
74
Tuesday, November 13, 12
75. Intermission:
What is
RabbitMQ
75
Tuesday, November 13, 12
77. RabbitMQ
• Multi Protocol Messaging Server
77
Tuesday, November 13, 12
78. RabbitMQ
• Multi Protocol Messaging Server
• Open Source (MPL)
78
Tuesday, November 13, 12
79. RabbitMQ
• Multi Protocol Messaging Server
• Open Source (MPL)
• Part of Spring Source
79
Tuesday, November 13, 12
80. RabbitMQ
• Multi Protocol Messaging Server
• Open Source (MPL)
• Part of Spring Source
• Supports AMQP, STOMP, MQTT
80
Tuesday, November 13, 12
81. RabbitMQ
• Multi Protocol Messaging Server
• Open Source (MPL)
• Part of Spring Source
• Supports AMQP, STOMP, MQTT
• Has Clients for Many Platforms: Java, Ruby, node.js, PHP,
Erlang, .Net., more
81
Tuesday, November 13, 12