Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

How to cook Rabbit on Production - Bohdan Parshentsev | Ruby Meditation 28

184 views

Published on

Talk of Bohdan Parshentsev, senior backend engineer at P2H, at Ruby Meditation #28 Kyiv 26.10.2019
Slideshare - **
Next conference - http://www.rubymeditation.com/
This presentation is connected with presentation How to cook Rabbit on Production - Serhiy Nazarov | Ruby Meditation 28

Why we need a Rabbit? Let's try to cook it tasty. And what else? - Live demo of several useful dishes. Be ready to use Telegram to have fun with us.

Announcements and conference materials https://www.fb.me/RubyMeditation
News https://twitter.com/RubyMeditation
Photos https://www.instagram.com/RubyMeditation
The stream of Ruby conferences (not just ours) https://t.me/RubyMeditation
* The channel of the organizers of the meetup https://t.me/incredevly

Published in: Software
  • Be the first to comment

  • Be the first to like this

How to cook Rabbit on Production - Bohdan Parshentsev | Ruby Meditation 28

  1. 1. How to cook Rabbit on Production Bohdan Parshencev Serhiy Nazarov
  2. 2. Without a monolith anywhere!
  3. 3. Expectation Reality
  4. 4. So, where a compromise?
  5. 5. RabbitMQ advantages ● Asynchronous processing ● Flexible routing ● Convenient debugging ● Scalability of consumers and producers ● Resilience to reboots and failures
  6. 6. Need advice
  7. 7. Challenge?
  8. 8. Resource - Action - Context ● Obvious solution ● Easy to solve business problems
  9. 9. How else?
  10. 10. RESOURCE PROCESS STATE context
  11. 11. Setup routing rabbit_connection ||= Bunny.new rabbit_connection.start rabbit_channel = rabbit_connection.create_channel exchange_general = rabbit_channel.headers("rm28.general", durable: true) exchange_space = rabbit_channel.headers("rm28.space", durable: true) serhiy_queue = rabbit_channel.queue("serhiy", durable: true) serhiy_queue.bind(exchange_general, arguments: { speaker: "serhiy", resource: "question", "x-match": :all }) serhiy_queue.bind(exchange_general, arguments: { speaker: "both", resource: "question", "x-match": :all }) bohdan_queue = rabbit_channel.queue("bohdan", durable: true) bohdan_queue.bind(exchange_general, arguments: { speaker: "bohdan", resource: "question", "x-match": :all }) bohdan_queue.bind(exchange_general, arguments: { speaker: "both", resource: "question", "x-match": :all }) exchange_space.bind(exchange_general, arguments: { resource: "message", "x-match": :all }) space_queue = rabbit_channel.queue("space", durable: true) space_queue.bind(exchange_space, arguments: { }) rabbit_connection.close
  12. 12. bohdan_queue = rabbit_channel.queue("bohdan", durable: true) bohdan_queue.bind(exchange_general, arguments: { speaker: "bohdan", resource: "question", "x-match": :all }) bohdan_queue.bind(exchange_general, arguments: { speaker: "both", resource: "question", "x-match": :all })
  13. 13. RPC remote procedure call
  14. 14. RPC stands for Remote Procedure Call. The basic concept of RPC is that some information is sent and later some information is received. There is a one to one correlation between those two categories of information under normal circumstances. This mirrors the basic paradigm of imperative programming: the function call. The difference is RPC is typically used to exchange information between two systems separated by a network connection or another communication medium. The two systems may not even be written in the same programming language.
  15. 15. DEMO
  16. 16. https://rabbit.rm28.demo.qpard.com

×