1 of 142

La charla interesante es en el otro track.

//

The interesting talk it’s next door

Moisés Rodríguez Jurado

moisesrj.dev

2 of 142

Kitchen nightmares 🍽️

Understanding message brokers

Moisés Rodríguez Jurado

moisesrj.dev

3 of 142

moisesrj.dev

Moisés (Moi) Rodríguez Jurado

Moisés Rodríguez Jurado

moisesrj.dev

Software Developer Crafter

4 of 142

moisesrj.dev

Moisés Rodríguez Jurado

moisesrj.dev

5 of 142

Disclaimers

Moisés Rodríguez Jurado

moisesrj.dev

6 of 142

  • I’m not an expert in message brokers
  • I don’t know how a restaurant works
  • I make ugly presentations
  • It’s my first talk in a conference
  • I’m pretty sure I’m going to receive some IP notice for this talk

Moisés Rodríguez Jurado

moisesrj.dev

7 of 142

Moisés Rodríguez Jurado

moisesrj.dev

8 of 142

Moisés Rodríguez Jurado

moisesrj.dev

9 of 142

XI EDITION #SCBCN24

UNIXcorn

PegaSO

PonIA

Moisés Rodríguez Jurado

moisesrj.dev

10 of 142

Moisés Rodríguez Jurado

moisesrj.dev

BUG

11 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Previously on “The Bug”...

12 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Mr. Doe

a.k.a. “The chef”

13 of 142

Moisés Rodríguez Jurado

moisesrj.dev

14 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Monolith

15 of 142

Moisés Rodríguez Jurado

moisesrj.dev

16 of 142

Moisés Rodríguez Jurado

moisesrj.dev

17 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Mr. Foo

a.k.a. “The waiter”

18 of 142

Moisés Rodríguez Jurado

moisesrj.dev

19 of 142

Moisés Rodríguez Jurado

moisesrj.dev

20 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Before we continue…

21 of 142

Moisés Rodríguez Jurado

moisesrj.dev

22 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Sender

Recipient

Channel

Feedback

Message

23 of 142

Moisés Rodríguez Jurado

moisesrj.dev

24 of 142

Episode 1:

The missing rice

25 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Chicken sandwich!

Two cokes and some fries!

I’d go for a double burger!

26 of 142

Moisés Rodríguez Jurado

moisesrj.dev

27 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Two chickens!

One burger

One rice, no fish

Two coffees

Two fries!

One bacon sandwich

28 of 142

Moisés Rodríguez Jurado

moisesrj.dev

29 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Table 3 is missing a rice

What rice? What table 3?

30 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Sender

Recipient

Channel

Feedback

Message

31 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Sender

Recipient

Feedback

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

32 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Sender

Recipient

Feedback

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

33 of 142

Moisés Rodríguez Jurado

moisesrj.dev

34 of 142

Moisés Rodríguez Jurado

moisesrj.dev

35 of 142

Moisés Rodríguez Jurado

moisesrj.dev

1 Chicken

2

Sandwich

1

Pizza

2

Fries

3

Salad

2

Burguer

36 of 142

Moisés Rodríguez Jurado

moisesrj.dev

1 Chicken

2

Sandwich

1

Pizza

2

Fries

3

Salad

2

Burguer

37 of 142

Moisés Rodríguez Jurado

moisesrj.dev

2

Sandwich

1

Pizza

2

Fries

3

Salad

2

Burguer

1 Chicken

38 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Sender

Recipient

Feedback

Queue

Feedback

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

Message

39 of 142

Moisés Rodríguez Jurado

moisesrj.dev

40 of 142

Moisés Rodríguez Jurado

moisesrj.dev

1 Chicken

2

Sandwich

1

Pizza

2

Fries

3

Salad

2

Burguer

2

Burger

(retry)

41 of 142

Moisés Rodríguez Jurado

moisesrj.dev

1 Chicken

2

Sandwich

1

Pizza

2

Fries

3

Salad

2

Burguer

2

Burger

(retry)

42 of 142

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:

43 of 142

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:

44 of 142

Moisés Rodríguez Jurado

moisesrj.dev

45 of 142

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

46 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Normal queue

Message

47 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Normal queue

Message

48 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Normal queue

Message�1 retry

49 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Normal queue

Message�1 retry

50 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Normal queue

Message�5 retry

51 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Normal queue

Dead letter queue

System is malfunctioning

Malformed payload

Some other sketchy thing

Message�5 retry

52 of 142

Normal queue

Message

Producer

Consumer

Queue

Point-to-point model

53 of 142

Normal queue

Message

Producers

Consumers

Queue

Message

Message

54 of 142

Episode 2:

The yelling

55 of 142

Moisés Rodríguez Jurado

moisesrj.dev

56 of 142

Moisés Rodríguez Jurado

moisesrj.dev

57 of 142

Moisés Rodríguez Jurado

moisesrj.dev

58 of 142

Working on it!

Doe! Mushrooms Risotto!

Moisés Rodríguez Jurado

moisesrj.dev

59 of 142

Foo! New customer!

I’ve seen it!

Moisés Rodríguez Jurado

moisesrj.dev

60 of 142

Foo! New customer!

Doe! Mushrooms Risotto!

POST http://localhost:1234/risotto

POST http://localhost:4321/new-customer

Moisés Rodríguez Jurado

moisesrj.dev

61 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Sender

Recipient

Channel

Feedback

Message

62 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Screams

Working on it!

Risotto is needed

63 of 142

Moisés Rodríguez Jurado

moisesrj.dev

HTTP/S

201 status code

POST request�/risotto

64 of 142

Moisés Rodríguez Jurado

moisesrj.dev

65 of 142

Moisés Rodríguez Jurado

moisesrj.dev

66 of 142

Moisés Rodríguez Jurado

moisesrj.dev

67 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Mrs. Bar

a.k.a. “The Bartender”

68 of 142

More people!

Moisés Rodríguez Jurado

moisesrj.dev

69 of 142

More people!

More yelling

Moisés Rodríguez Jurado

moisesrj.dev

70 of 142

Moisés Rodríguez Jurado

moisesrj.dev

71 of 142

Trade-offs with the yelling http system

🍕 Know that the other person exists

💻 Knowledge of other systems

72 of 142

Trade-offs with the yelling http system

🍕 Careful with misspelling!

💻 Fixed endpoints

73 of 142

Trade-offs with the yelling http system

🍕 Respond in the moment

💻 Synchronous responses

74 of 142

Trade-offs with the yelling http system

🍕 Multiple screams for complex tasks

💻 Multiple calls for a single operation/event

75 of 142

Moisés Rodríguez Jurado

moisesrj.dev

76 of 142

Smart Pagers!

Moisés Rodríguez Jurado

moisesrj.dev

77 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.rice.risotto

food.*

food.rice.*

food.rice.risotto

78 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.rice.risotto

food.*

food.rice.*

food.rice.risotto

food.

rice.

risotto

79 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.rice.risotto

food.*

food.rice.*

food.rice.risotto

food.

rice.

risotto

80 of 142

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

81 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.rice.risotto

food.rice.*

food.*

82 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.rice.*

food.*

83 of 142

Ok, let’s cook

some food!

Rice! Let’s

have the white wine ready

Moisés Rodríguez Jurado

moisesrj.dev

food.rice.*

food.*

84 of 142

Moisés Rodríguez Jurado

moisesrj.dev

85 of 142

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

86 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Sender

Recipient

Channel

Feedback

Message

87 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Producer

Broker

Channel: Depending on the broker

ok

Message

88 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Producer

Broker

Channel

ok

Message

Consumer

Message

Consumer

Message

ok

ok

89 of 142

Normal queue

Message

Producer

Consumer

Queue

Point-to-point model

Remembering…

90 of 142

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

91 of 142

Moisés Rodríguez Jurado

moisesrj.dev

92 of 142

Episode 3:

The infinite chicken

93 of 142

Moisés Rodríguez Jurado

moisesrj.dev

94 of 142

Moisés Rodríguez Jurado

moisesrj.dev

95 of 142

Moisés Rodríguez Jurado

moisesrj.dev

96 of 142

Moisés Rodríguez Jurado

moisesrj.dev

97 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.chicken.roasted

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

98 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

99 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

100 of 142

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

101 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Ok, let’s cook

some food

102 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Ok, let’s cook

some food

Ok, let’s charge the client

103 of 142

Moisés Rodríguez Jurado

moisesrj.dev

Ok, let’s cook

some food

Ok, let’s charge the client

💀

104 of 142

Moisés Rodríguez Jurado

moisesrj.dev

105 of 142

Smart Pagers!

Moisés Rodríguez Jurado

moisesrj.dev

106 of 142

Smart Pagers!

Moisés Rodríguez Jurado

moisesrj.dev

107 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

108 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

109 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

I’m free! �*click*

110 of 142

Moisés Rodríguez Jurado

moisesrj.dev

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

food.*

Let’s get to work

111 of 142

Moisés Rodríguez Jurado

moisesrj.dev

112 of 142

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

113 of 142

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

114 of 142

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

115 of 142

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

116 of 142

Moisés Rodríguez Jurado

moisesrj.dev

117 of 142

Delivery models

Moisés Rodríguez Jurado

moisesrj.dev

https://blog.bytebytego.com/p/at-most-once-at-least-once-exactly

118 of 142

Delivery models

Moisés Rodríguez Jurado

moisesrj.dev

https://blog.bytebytego.com/p/at-most-once-at-least-once-exactly

119 of 142

Delivery models

Moisés Rodríguez Jurado

moisesrj.dev

https://blog.bytebytego.com/p/at-most-once-at-least-once-exactly

120 of 142

Moisés Rodríguez Jurado

moisesrj.dev

121 of 142

THE END

Moisés Rodríguez Jurado

moisesrj.dev

122 of 142

THE END ?

Moisés Rodríguez Jurado

moisesrj.dev

123 of 142

Bloopers!

Moisés Rodríguez Jurado

moisesrj.dev

124 of 142

Moisés Rodríguez Jurado

moisesrj.dev

125 of 142

What if…

  • A message is not processed?
  • There is a problem and a message is repeated
  • The topic / queue name changes only on one side

This is the end, I promise 👉👈

Moisés Rodríguez Jurado

moisesrj.dev

126 of 142

What if a message is not processed?

Moisés Rodríguez Jurado

moisesrj.dev

127 of 142

What if a message is not processed?

Moisés Rodríguez Jurado

moisesrj.dev

Broker

Consumer

msg

Consumer

Consumer

128 of 142

What if a message is not processed?

Moisés Rodríguez Jurado

moisesrj.dev

Broker

Consumer

msg

Consumer

Consumer

msg

129 of 142

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!

130 of 142

What if there is a problem and a message is repeated?

Moisés Rodríguez Jurado

moisesrj.dev

131 of 142

What if there is a problem and a message is repeated?

Moisés Rodríguez Jurado

moisesrj.dev

Updating

Processing a payment

🤷‍♂️

☠️

132 of 142

What if there is a problem and a message is repeated?

Moisés Rodríguez Jurado

moisesrj.dev

133 of 142

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.

134 of 142

What if the topic changes only on one side?

Moisés Rodríguez Jurado

moisesrj.dev

135 of 142

What if the topic changes only on one side?

Moisés Rodríguez Jurado

moisesrj.dev

136 of 142

What if the topic changes only on one side?

Moisés Rodríguez Jurado

moisesrj.dev

  1. Enforce format
  2. Creating shared, internal libraries
  3. Smoke/Contract tests

137 of 142

THE END

This time for real 👽

Moisés Rodríguez Jurado

moisesrj.dev

138 of 142

Maybe we still don’t know how to cook…

Moisés Rodríguez Jurado

moisesrj.dev

139 of 142

But at least we know about how message brokers work!

Moisés Rodríguez Jurado

moisesrj.dev

140 of 142

But at least we know a bit about how message brokers work!

Moisés Rodríguez Jurado

moisesrj.dev

141 of 142

But at least we know a bit about how message brokers work!

Thank you for your time 💚

Moisés Rodríguez Jurado

moisesrj.dev

142 of 142

Kitchen nightmares 🍽️

Questions?

Understanding message brokers

moisesrj.dev