La charla interesante es en el otro track.
//
The interesting talk it’s next door
Moisés Rodríguez Jurado
moisesrj.dev
Kitchen nightmares 🍽️
Understanding message brokers
Moisés Rodríguez Jurado
moisesrj.dev
moisesrj.dev
Moisés (Moi) Rodríguez Jurado
Moisés Rodríguez Jurado
moisesrj.dev
Software Developer Crafter
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Disclaimers
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
XI EDITION #SCBCN24
UNIXcorn
PegaSO
PonIA
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
BUG
Moisés Rodríguez Jurado
moisesrj.dev
Previously on “The Bug”...
Moisés Rodríguez Jurado
moisesrj.dev
Mr. Doe
a.k.a. “The chef”
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Monolith
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Mr. Foo
a.k.a. “The waiter”
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Before we continue…
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Sender
Recipient
Channel
Feedback
Message
Moisés Rodríguez Jurado
moisesrj.dev
Episode 1:
The missing rice
Moisés Rodríguez Jurado
moisesrj.dev
Chicken sandwich!
Two cokes and some fries!
I’d go for a double burger!
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Two chickens!
…
One burger
One rice, no fish
Two coffees
Two fries!
One bacon sandwich
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Table 3 is missing a rice
What rice? What table 3?
Moisés Rodríguez Jurado
moisesrj.dev
Sender
Recipient
Channel
Feedback
Message
Moisés Rodríguez Jurado
moisesrj.dev
Sender
Recipient
Feedback
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Moisés Rodríguez Jurado
moisesrj.dev
Sender
Recipient
Feedback
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
1 Chicken
2
Sandwich
1
Pizza
2
Fries
3
Salad
2
Burguer
Moisés Rodríguez Jurado
moisesrj.dev
1 Chicken
2
Sandwich
1
Pizza
2
Fries
3
Salad
2
Burguer
Moisés Rodríguez Jurado
moisesrj.dev
2
Sandwich
1
Pizza
2
Fries
3
Salad
2
Burguer
1 Chicken
Moisés Rodríguez Jurado
moisesrj.dev
Sender
Recipient
Feedback
Queue
Feedback
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Message
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
1 Chicken
2
Sandwich
1
Pizza
2
Fries
3
Salad
2
Burguer
2
Burger
(retry)
Moisés Rodríguez Jurado
moisesrj.dev
1 Chicken
2
Sandwich
1
Pizza
2
Fries
3
Salad
2
Burguer
2
Burger
(retry)
Moisés Rodríguez Jurado
moisesrj.dev
1 Chicken
2
Sandwich
1
Pizza
2
Fries
3
Salad
2
Burguer
2
Burger
(5th retry)
To check:
Moisés Rodríguez Jurado
moisesrj.dev
1 Chicken
2
Sandwich
1
Pizza
2
Fries
3
Salad
2
Burguer
2
Burger
(5th retry)
To check:
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
In the fields of engineering and construction, resilience is the ability to absorb or avoid damage without suffering complete failure and is an objective of design
Moisés Rodríguez Jurado
moisesrj.dev
Normal queue
Message
Moisés Rodríguez Jurado
moisesrj.dev
Normal queue
Message
Moisés Rodríguez Jurado
moisesrj.dev
Normal queue
Message�1 retry
Moisés Rodríguez Jurado
moisesrj.dev
Normal queue
Message�1 retry
Moisés Rodríguez Jurado
moisesrj.dev
Normal queue
Message�5 retry
Moisés Rodríguez Jurado
moisesrj.dev
Normal queue
Dead letter queue
System is malfunctioning
Malformed payload
Some other sketchy thing
Message�5 retry
Normal queue
Message
Producer
Consumer
Queue
Point-to-point model
Normal queue
Message
Producers
Consumers
Queue
Message
Message
Episode 2:
The yelling
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Working on it!
Doe! Mushrooms Risotto!
Moisés Rodríguez Jurado
moisesrj.dev
Foo! New customer!
I’ve seen it!
Moisés Rodríguez Jurado
moisesrj.dev
Foo! New customer!
Doe! Mushrooms Risotto!
POST http://localhost:1234/risotto
POST http://localhost:4321/new-customer
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Sender
Recipient
Channel
Feedback
Message
Moisés Rodríguez Jurado
moisesrj.dev
Screams
Working on it!
Risotto is needed
Moisés Rodríguez Jurado
moisesrj.dev
HTTP/S
201 status code
POST request�/risotto
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Mrs. Bar
a.k.a. “The Bartender”
More people!
Moisés Rodríguez Jurado
moisesrj.dev
More people!
More yelling
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Trade-offs with the yelling http system
🍕 Know that the other person exists
💻 Knowledge of other systems
Trade-offs with the yelling http system
🍕 Careful with misspelling!
💻 Fixed endpoints
Trade-offs with the yelling http system
🍕 Respond in the moment
💻 Synchronous responses
Trade-offs with the yelling http system
🍕 Multiple screams for complex tasks
💻 Multiple calls for a single operation/event
Moisés Rodríguez Jurado
moisesrj.dev
Smart Pagers!
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.rice.*
food.*
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.*
food.*
Ok, let’s cook
some food!
Rice! Let’s
have the white wine ready
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.*
food.*
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
Producer
Broker
Topic/
Subscription
Consumer
Pub/Sub model
Message
Moisés Rodríguez Jurado
moisesrj.dev
Sender
Recipient
Channel
Feedback
Message
Moisés Rodríguez Jurado
moisesrj.dev
Producer
Broker
Channel: Depending on the broker
ok
Message
Moisés Rodríguez Jurado
moisesrj.dev
Producer
Broker
Channel
ok
Message
Consumer
Message
Consumer
Message
ok
ok
Normal queue
Message
Producer
Consumer
Queue
Point-to-point model
Remembering…
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
Producer
Broker
Topic
Consumer
Pub/Sub model
Moisés Rodríguez Jurado
moisesrj.dev
Episode 3:
The infinite chicken
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
food.chicken.roasted
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
Moisés Rodríguez Jurado
moisesrj.dev
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
Moisés Rodríguez Jurado
moisesrj.dev
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
Moisés Rodríguez Jurado
moisesrj.dev
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Ok, let’s cook
some food
Moisés Rodríguez Jurado
moisesrj.dev
Ok, let’s cook
some food
Moisés Rodríguez Jurado
moisesrj.dev
Ok, let’s cook
some food
Ok, let’s charge the client
Moisés Rodríguez Jurado
moisesrj.dev
Ok, let’s cook
some food
Ok, let’s charge the client
💀
Moisés Rodríguez Jurado
moisesrj.dev
Smart Pagers!
Moisés Rodríguez Jurado
moisesrj.dev
Smart Pagers!
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
Moisés Rodríguez Jurado
moisesrj.dev
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
Moisés Rodríguez Jurado
moisesrj.dev
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
I’m free! �*click*
Moisés Rodríguez Jurado
moisesrj.dev
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
food.*
Let’s get to work
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
Producer
Broker
Consumers
Group 1
Topic
Group 2
Group 3
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
Producer
Broker
Consumers
Group 1
Topic
Group 2
Group 3
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
Producer
Broker
Group
Consumers
Group 1
Topic
Group 2
Group 3
Moisés Rodríguez Jurado
moisesrj.dev
food.rice.risotto
food.*
food.rice.*
food.rice.risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
food.
rice.
risotto
Producer
Broker
Queue
Consumers
Topic
food.* queue
food.rice.* queue
food.rice.risotto queue
Moisés Rodríguez Jurado
moisesrj.dev
Delivery models
Moisés Rodríguez Jurado
moisesrj.dev
https://blog.bytebytego.com/p/at-most-once-at-least-once-exactly
Delivery models
Moisés Rodríguez Jurado
moisesrj.dev
https://blog.bytebytego.com/p/at-most-once-at-least-once-exactly
Delivery models
Moisés Rodríguez Jurado
moisesrj.dev
https://blog.bytebytego.com/p/at-most-once-at-least-once-exactly
Moisés Rodríguez Jurado
moisesrj.dev
THE END
Moisés Rodríguez Jurado
moisesrj.dev
THE END ?
Moisés Rodríguez Jurado
moisesrj.dev
Bloopers!
Moisés Rodríguez Jurado
moisesrj.dev
Moisés Rodríguez Jurado
moisesrj.dev
What if…
This is the end, I promise 👉👈
Moisés Rodríguez Jurado
moisesrj.dev
What if a message is not processed?
Moisés Rodríguez Jurado
moisesrj.dev
What if a message is not processed?
Moisés Rodríguez Jurado
moisesrj.dev
Broker
Consumer
msg
Consumer
Consumer
What if a message is not processed?
Moisés Rodríguez Jurado
moisesrj.dev
Broker
Consumer
msg
Consumer
Consumer
msg
What if a message is not processed?
Moisés Rodríguez Jurado
moisesrj.dev
Broker
Consumer
msg
Consumer
Consumer
Retry
Send to special queue
External notification
OK / KO
Feedback!
What if there is a problem and a message is repeated?
Moisés Rodríguez Jurado
moisesrj.dev
What if there is a problem and a message is repeated?
Moisés Rodríguez Jurado
moisesrj.dev
Updating
Processing a payment
🤷♂️
☠️
What if there is a problem and a message is repeated?
Moisés Rodríguez Jurado
moisesrj.dev
What if there is a problem and a message is repeated?
Moisés Rodríguez Jurado
moisesrj.dev
Idempotence (UK: /ˌɪdɛmˈpoʊtəns/,[1] US: /ˈaɪdəm-/)[2] is the property of certain operations in mathematics and computer science whereby they can be applied multiple times without changing the result beyond the initial application.
What if the topic changes only on one side?
Moisés Rodríguez Jurado
moisesrj.dev
What if the topic changes only on one side?
Moisés Rodríguez Jurado
moisesrj.dev
What if the topic changes only on one side?
Moisés Rodríguez Jurado
moisesrj.dev
THE END
This time for real 👽
Moisés Rodríguez Jurado
moisesrj.dev
Maybe we still don’t know how to cook…
Moisés Rodríguez Jurado
moisesrj.dev
But at least we know about how message brokers work!
Moisés Rodríguez Jurado
moisesrj.dev
But at least we know a bit about how message brokers work!
Moisés Rodríguez Jurado
moisesrj.dev
But at least we know a bit about how message brokers work!
Thank you for your time 💚
Moisés Rodríguez Jurado
moisesrj.dev
Kitchen nightmares 🍽️
Questions?
Understanding message brokers
moisesrj.dev