RabbitMQ is the new King
-
Upload
spring-io -
Category
Technology
-
view
2.105 -
download
2
description
Transcript of RabbitMQ is the new King
![Page 1: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/1.jpg)
© 2013 SpringOne 2GX. All rights reserved. Do not distribute without permission.
RabbitMQ is the new kingJan Machacek | Alvaro Videla
![Page 2: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/2.jpg)
Jan Machacek
• Works at Cake Solutions
• Author of Pro Spring, Pro Spring 2.5 and other books & articles
• Author of Akka Patterns, Specs2 Spring, Scalad;Spring Extensions, Spock Spring Integration
• Editor of the Open Source Journal
• @honzam399 | [email protected]/janm399
![Page 3: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/3.jpg)
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 | [email protected]/videlalvaro
![Page 4: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/4.jpg)
Why do we need messaging?
![Page 5: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/5.jpg)
Classic Web Apps
![Page 6: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/6.jpg)
Implement a Photo Gallery
![Page 7: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/7.jpg)
Two Parts:
![Page 8: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/8.jpg)
Pretty Simple
![Page 9: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/9.jpg)
‘Till new requirements arrive
![Page 10: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/10.jpg)
The Product Owner
![Page 11: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/11.jpg)
Can we also notify the user friends when she uploads a new
image?
![Page 12: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/12.jpg)
Can we also notify the user friends when she uploads a new
image?
I forgot to mention we need it for tomorrow…
![Page 13: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/13.jpg)
The Social Media Guru
![Page 14: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/14.jpg)
We need to give badges to users for each picture upload
![Page 15: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/15.jpg)
We need to give badges to users for each picture upload
and post uploads to Twitter
![Page 16: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/16.jpg)
The Sysadmin
![Page 17: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/17.jpg)
Dumb! You’re delivering full size images!
The bandwidth bill has tripled!
![Page 18: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/18.jpg)
Dumb! You’re delivering full size images!
The bandwidth bill has tripled!
We need this fixed for yesterday!
![Page 19: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/19.jpg)
The Developer in the other team
![Page 20: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/20.jpg)
I need to call your Java stuff but from Python
![Page 21: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/21.jpg)
I need to call your PHP stuff but from Python
And also PHP starting next week
![Page 22: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/22.jpg)
The User
![Page 23: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/23.jpg)
I don’t want to waittill your app resizes
my image!
![Page 24: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/24.jpg)
You
![Page 25: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/25.jpg)
(╯°□°)╯( ┻━┻
![Page 26: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/26.jpg)
Let’s see the code evolution
![Page 27: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/27.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Comments
![Page 28: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/28.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Function Name
![Page 29: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/29.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Arguments
![Page 30: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/30.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Function Body
![Page 31: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/31.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
Pseudo Code
Return Value
![Page 32: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/32.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.
First Implementation:
![Page 33: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/33.jpg)
%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),
ok.
Second Implementation:
![Page 34: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/34.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:
![Page 35: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/35.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:
![Page 36: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/36.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:
![Page 37: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/37.jpg)
Can our code scale to new requirements?
![Page 38: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/38.jpg)
What if
![Page 39: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/39.jpg)
• We need to speed up image conversion
What if
![Page 40: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/40.jpg)
• We need to speed up image conversion• User notifications sent by email
What if
![Page 41: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/41.jpg)
• We need to speed up image conversion• User notifications sent by email• Stop tweeting about new images
What if
![Page 42: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/42.jpg)
• We need to speed up image conversion• User notifications sent by email• Stop tweeting about new images• Resize in different formats
What if
![Page 43: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/43.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
![Page 44: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/44.jpg)
Can we do better?
![Page 45: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/45.jpg)
Sure.Using messaging
![Page 46: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/46.jpg)
DesignPublish / Subscribe Pattern
![Page 47: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/47.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:
![Page 48: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/48.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).
![Page 49: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/49.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').
![Page 50: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/50.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).
![Page 51: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/51.jpg)
Second Implementation:
![Page 52: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/52.jpg)
Second Implementation:
THIS PAGE INTENTIONALLY LEFT BLANK
![Page 53: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/53.jpg)
What is RabbitMQ
![Page 54: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/54.jpg)
RabbitMQ
![Page 55: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/55.jpg)
RabbitMQ
• Multi Protocol Messaging Server
![Page 56: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/56.jpg)
RabbitMQ
• Multi Protocol Messaging Server• Open Source (MPL)
![Page 57: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/57.jpg)
RabbitMQ
• Multi Protocol Messaging Server• Open Source (MPL)• Polyglot
![Page 58: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/58.jpg)
RabbitMQ
• Multi Protocol Messaging Server• Open Source (MPL)• Polyglot• Written in Erlang/OTP
![Page 59: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/59.jpg)
Multi Protocol
http://bit.ly/rmq-protocols
![Page 60: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/60.jpg)
Polyglot
![Page 61: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/61.jpg)
Polyglot
• Java
![Page 62: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/62.jpg)
Polyglot
• Java• node.js
![Page 63: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/63.jpg)
Polyglot
• Java• node.js• Erlang
![Page 64: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/64.jpg)
Polyglot
• Java• node.js• Erlang• PHP
![Page 65: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/65.jpg)
Polyglot
• Java• node.js• Erlang• PHP• Ruby
![Page 66: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/66.jpg)
Polyglot
• Java• node.js• Erlang• PHP• Ruby• .Net
![Page 67: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/67.jpg)
Polyglot
• Java• node.js• Erlang• PHP• Ruby• .Net• Haskell
![Page 68: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/68.jpg)
Polyglot
Even COBOL!!!11
![Page 69: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/69.jpg)
Some users of RabbitMQ
![Page 70: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/70.jpg)
Some users of RabbitMQ
![Page 71: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/71.jpg)
Some users of RabbitMQ
• Indeed.com
![Page 72: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/72.jpg)
Some users of RabbitMQ
• Indeed.com
• MailboxApp
![Page 73: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/73.jpg)
Some users of RabbitMQ
• Indeed.com
• MailboxApp
• Mercado Libre
![Page 74: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/74.jpg)
![Page 75: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/75.jpg)
Messaging with RabbitMQ
A demo with the RabbitMQ Simulator
https://github.com/RabbitMQSimulator/RabbitMQSimulator
![Page 76: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/76.jpg)
What are we building?
![Page 77: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/77.jpg)
What are we building?
AMQP
Server
CV
![Page 78: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/78.jpg)
What are we building?
AMQP
Server
CV
![Page 79: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/79.jpg)
onCoinResponse(CorrelationId, CoinResponse): Unit
RecogServiceActivatormjpegChunk(CorrelationId) (ChunkData): UnitimageChunk(CorrelationId) (ChunkData): Unit
RecogService
![Page 80: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/80.jpg)
Demo
![Page 81: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/81.jpg)
int:chain
ChunkData Collection[FrameData]FrameData
Array[Byte] StringFrameData
FrameDataFrameData
int:chain
decodeFrame(ChunkData): Collection[FrameData]
ChunkDecoder
DefaultMessageSplitter
AmqpOutboundEndpoint
ObjectToStringTransformer
ServiceActivatingHandler
ServiceActivatingHandler
onCoinResponse(CorrelationId, CoinResponse): Unit
RecogServiceActivator
mjpegChunk(ChunkData): UnitimageChunk(ChunkData): Unit
recogChannel: MessageChannelRecogService
DirectChannel
![Page 82: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/82.jpg)
mjpegChunk(CorrelationId) (ChunkData): UnitimageChunk(CorrelationId) (ChunkData): Unit
RecogService
mjpegChunk(SessionId, ChunkData): UnitimageChunk(SessionId, ChunkData): Unit
recogService: RecogServiceRecogController
sessionEnded(SessionId): UnitonCoinResponse(CorrelationId, CoinResponse): Unit
sessions: Map[SessionId, CoinResponse]messageSender: MessageSendingOperations[...]
RecogSessions
onCoinResponse(CorrelationId, CoinResponse): Unit
recogSessions: RecogSessionsRecogServiceActivator
![Page 83: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/83.jpg)
SubscribableChannel dispatchChannel
SubscribableChannel webSocketHandlerChannel
MessagingWebSocketHandler
AnnotationMessageHandler
SimpleBrokerMessageHandler
RecogSessions
RecogController
send
send
send
send
subscribe
subscribe
send
send
subscribeMessageSendingOperations[] DispatcherServlet
HTTP
WebSocket
SubProtocolWebSocketHandler
RecogService
![Page 84: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/84.jpg)
Questions
https://github.com/eigengo/springone2gx2013
![Page 85: RabbitMQ is the new King](https://reader034.fdocuments.us/reader034/viewer/2022042513/547eaa74b47959ac508b4be1/html5/thumbnails/85.jpg)