You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
O conceito dessa etapa é apresentar o básico da mensageria, teremos um <i>Producer</i> que irá enviar uma mensagem, a <i>queue</i>, ou <i>fila</i> que irá fazer o processo onde tranformará a mensagem em um buffer para que, finalmente, seja entregue ao <i>Consumer</i>, que imprimirá a mensagem.
7
+
O conceito dessa etapa é apresentar o básico da mensageria, teremos um <i>Producer</i> que irá enviar uma mensagem, a <i>queue</i>, ou <i>fila</i> que irá fazer o processo onde armazenará a mensagem em um buffer para que, finalmente, seja entregue ao <i>Consumer</i>, que imprimirá a mensagem.
8
8
9
9
```mermaid
10
10
flowchart LR
@@ -31,7 +31,7 @@ Utilize esses comandos para teste:
31
31
# -> [x] Sent: Hello World!
32
32
```
33
33
34
-
## (#1) Work Queues
34
+
## ([#1](https://github.com/lucasgianine/message-queuing/pull/1)) Work Queues
35
35
Vamos trabalhar em criar Work Queues (ou Task Queues) para distribuir tarefas demoradas entre vários workers, ou seja, quando uma tarefa exije muitos recursos, todo fluxo espera que ela seja concluída para que a mensagem seja exibida, a ideia do Work Queues é que agendemos a tarefa para que ela seja feita mais tarde.
36
36
37
37
```mermaid
@@ -105,3 +105,71 @@ Pra corrigir esse feito, usamos `prefetch` com o valor `1` para que o Rabbit ent
Dessa vez iremos entregar uma mensagem para vários consumidores, criaremos um registro simples com dois programas, onde um emitirá mensagens de registro e outro que vai receber e imprimir, no nosso programa, cada cópia em execução do receptor receberá as mensagens, onde o receptor poderá se comunicar com os dois queues ao mesmo tempo.
111
+
112
+
Toda ideia do Rabbit é que, na verdade o <i>producer</i> nunca envie mensagem diretamente para fila (pois na realidade é que o <i>producer</i> nem sabe se a mensagem chegará até lá), mas ao invés disso ele envie mensagens para uma `exchange`, pois ela sabe exatamente o que fazer com a mensagem que recebeu para empurrá-lá para uma <i>queue</i>.
113
+
114
+
```mermaid
115
+
flowchart LR
116
+
P["Producer"]
117
+
X{"Exchange"}
118
+
Q1["Queue 1"]
119
+
Q2["Queue 2"]
120
+
121
+
P --> X --> Q1
122
+
X --> Q2
123
+
```
124
+
125
+
Há alguns tipos de exchanges, mas vamos trabalhar em cima do `fanout`: Ela transmite todas as mensagens que recebe para todas as filas que ela tem conhecimento.
Dar o nome para uma fila é importante para compartilharmos ela entre os <i>produces</i> e <i>consumers</i>, mas no caso dessa aplicação de logs, não precisamos criar uma fila permanente, deixaremos o nome da fila vazio para que o próprio servidor possa dar um nome aleatório, já que nesse momento isso não é prioritário visto que a fila, depois de ser consumida, deverá ser apagada automaticamente.
132
+
```typescript
133
+
channel.assertQueue('', {
134
+
exclusive: true
135
+
})
136
+
137
+
// Exemplo de retorno: amq.gen-JzTY20BRgKO-HjmUJj0wLg
138
+
```
139
+
140
+
Depois de todo o processo de criar <i>exchange</i> e as filas temporárias agora vamos fazer nossa <i>exchange</i> enviar mensagem para a <i>fila</i>.
141
+
```mermaid
142
+
flowchart LR
143
+
P["Producer"]
144
+
X{"Exchange"}
145
+
Q1["Queue 1"]
146
+
Q2["Queue 2"]
147
+
148
+
P --> X -- Binding --> Q1
149
+
X -- Binding --> Q2
150
+
```
151
+
152
+
Chamamos de `binding` o relacionamento entre exchange (troca) e uma queue (fila).
153
+
```typescript
154
+
channel.bindQueue(queue_name, 'logs', '')
155
+
```
156
+
157
+
Utilize esses comandos para teste:
158
+
```bash
159
+
# shell 1
160
+
npm run receive_logs
161
+
162
+
# -> Será criado um arquivo .log na pasta src/logs
163
+
# -> No arquivo aparecerá a <mensagem> escrita no próximo shell
164
+
```
165
+
166
+
```bash
167
+
# shell 2
168
+
npm run emit_logs <mensagem>
169
+
170
+
# -> [x] Sent: <mensagem>
171
+
```
172
+
173
+
## Referência
174
+
-[RabbitMQ](https://www.rabbitmq.com/)
175
+
-[Documentação do RabbitMQ](https://www.rabbitmq.com/tutorials)
0 commit comments