βββββββββββββββββββββ
β Producer β
β (produce.js) β
βββββββββββββββββββββ
|
v
ββββββββββββββββββββββββββββ
β Stream Queue (Rabbit) β
β type=stream β
β giα»― tαΊ₯t cαΊ£ message β
ββββββββββββββββββββββββββββ
|
v
ββββββββββββββββββββββββββββ
β Consumer β
β (consume.js) β
ββββββββββββββββββββββββββββ
|
ββββββββββββββββββββββββββββ
β Data Warehouse (file) β
β dataWarehouse.txt β
ββββββββββββββββββββββββββββ
|
ββββββββββββββββββββββββββββ
β Offset Checkpoint β
β offset.txt β
ββββββββββββββββββββββββββββ
ββββββββββββββββββ
β Producer β
ββββββββββββββββββ
|
v
βββββββββββββββββββββββββββββββ
β delay_queue_10s β
β (TTL = 10s, DLX β main_ex) β
βββββββββββββββββββββββββββββββ
|
(Message giα»― trong queue 10s)
|
TTL hαΊΏt hαΊ‘n (10s trΓ΄i qua)
|
v
βββββββββββββββββββββββββββββββ
β main_exchange β
β (direct, routing key=go) β
βββββββββββββββββββββββββββββββ
|
v
βββββββββββββββββββββββββββββββ
β delayed_target_queue β
β (nΖ‘i Consumer lαΊ―ng nghe) β
βββββββββββββββββββββββββββββββ
|
v
ββββββββββββββββββ
β Consumer β
β [β] nhαΊn msg β
ββββββββββββββββββ
+------------------+
| Producer |
| (DXL function) |
+--------+---------+
|
v
+------------------+
| main_queue |<-------------------+
| (TTL = 5s) | |
| DLX = dlx_exchange |
+--------+---------+ |
| |
(msg expired or rejected) |
| |
v |
+------------------+ |
| dlx_exchange | (fanout exchange) |
+--------+---------+ |
| |
v |
+------------------+ |
| dead_letter_queue|--------------------+
+------------------+
+-------------+ +----------------+ +----------------+
| | task | | | |
| Producer +--------->+ Queue (tasks)+------->+ Worker 1 |
| | | | | (Consumer) |
+-------------+ +----------------+ +----------------+
^
|
|
v
+----------------+
| Worker 2 |
| (Consumer) |
+----------------+
[Producer]
|
v
βββββββββββββββββ
β Queue (msg_ttl_queue) β
βββββββββββββββββ
|
| Message cΓ³ TTL=5s
|--------------------------> NαΊΏu Consumer Δα»c trong 5s β xα» lΓ½ OK
|
βββ> Sau 5s -> Message tα»± Δα»ng expire -> bα» xΓ³a khα»i queue
+-------------------+
| Producer App |
+-------------------+
|
-------------------------------------------------
| | |
v v v
[Normal ticket] [VIP ticket] [Medium ticket]
priority = 1 priority = 10 priority = 5
| | |
-------------------------+-----------------------+
v
ββββββββββββββββββββ
β Priority Queue β
β (x-max-priority=10)
ββββββββββββββββββββ
|
v
+--------------------+
| Consumer App |
| (reads by priority)|
+--------------------+
|
--------------------------------------------
| | |
v v v
Process VIP Process Medium Process Normal
(10) (5) (1)
βββββββββββββββββββββ
β EmailProducer β
βββββββββββ¬ββββββββββ
β
βΌ
βββββββββββββββββββββ
β ExchangeMain (direct)
β "email.main.ex" β
βββββββββββ¬ββββββββββ
β routingKey=email
βΌ
βββββββββββββββββββββ
β QueueMain β
β "email.main" β
β DLX β ExchangeRetry
βββββββββββ¬ββββββββββ
β
βββββββββββββββ΄βββββββββββββββββ
β β
[β Success] [β Fail β reject]
channel.ack(msg) DLX β "email.retry.ex"
β
βΌ
ββββββββββββββββββββββββββ
β QueueRetry β
β "email.retry" β
β TTL=10s β DLX β Main β
βββββββββββ¬ββββββββββββββ
β (sau 10s)
βΌ
ββββββββββββββββββββββββββ
β ExchangeMain β
βββββββββββ¬ββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββ
β QueueMain (retry lαΊ§n 2)β
ββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββ
β NαΊΏu retryCount >= 3 β
β Worker publish β ExchangeDead (fanout) β
β β QueueDead ("email.dead") β
βββββββββββββββββββββββββββββββββββββββββββββββ
βΌ
ββββββββββββββββββββββββ
β EmailDeadConsumer β
β Log/Debug Failures β
ββββββββββββββββββββββββ
π GiαΊ£i thΓch ngαΊ―n gα»n
Producer gα»i message vΓ o email_exchange.
email_queue nhαΊn message, consumer sαΊ½ xα» lΓ½ (gα»i email thαΊt).
NαΊΏu gα»i thΓ nh cΓ΄ng β ACK β message biαΊΏn mαΊ₯t.
NαΊΏu gα»i thαΊ₯t bαΊ‘i (timeout, lα»i SMTP, β¦):
Message sαΊ½ chuyα»n sang DLX (dlx_exchange).
DLX ΔΖ°a message vΓ o retry_queue.
Sau khi hαΊΏt TTL (vΓ dα»₯ 10s), RabbitMQ tα»± Δα»ng chuyα»n lαΊ‘i message vα» email_exchange Δα» retry.
NαΊΏu retry quΓ‘ sα» lαΊ§n (vΓ dα»₯ 3 lαΊ§n), message sαΊ½ Δi vΓ o dead_queue (bα» hαΊ³n, log lαΊ‘i Δα» dev check).
Code Web KhΓ΄ng KhΓ³
BΓͺn cαΊ‘nh tΓ i liα»u miα» n phΓ, mΓ¬nh cΓ²n mα» cΓ‘c khΓ³a hα»c online:
- LαΊp trΓ¬nh web cΖ‘ bαΊ£n β nΓ’ng cao
- Ứng dα»₯ng vα» AI vΓ Automation
- Kα»Ή nΔng phα»ng vαΊ₯n & xΓ’y CV IT
- π Website: https://codewebkhongkho.com
- π§ Email: [email protected]
- π Zalo/Hotline: 0798805741
NαΊΏu bαΊ‘n thαΊ₯y cΓ‘c source hα»―u Γch vΓ muα»n mΓ¬nh tiαΊΏp tα»₯c phΓ‘t triα»n nα»i dung miα»
n phΓ, hΓ£y α»§ng hα» mΓ¬nh bαΊ±ng cΓ‘ch donate.
MΓ¬nh sαΊ½ sα» dα»₯ng kinh phΓ cho:
- π Server, domain, hosting
- π οΈ CΓ΄ng cα»₯ bαΊ£n quyα»n (IDE, pluginβ¦)
- π Hα»c bα»ng, quΓ tαΊ·ng cho cα»ng Δα»ng
QuΓ©t QR Δα» α»§ng hα» nhanh:
QR Code ABBank
- Chα»§ tΓ i khoαΊ£n: Nguyα» n TiαΊΏn TΓ i
- NgΓ’n hΓ ng: NGAN HANG TMCP AN BINH
- Sα» tΓ i khoαΊ£n: 1651002972052
- π Facebook DαΊ‘y Hα»c: Code Web KhΓ΄ng KhΓ³
- π Tiktok DαΊ‘y Hα»c: @code.web.khng.kh
- π» GitHub: fdhhhdjd
- π§ Email: [email protected]
CαΊ£m Ζ‘n bαΊ‘n ΔΓ£ quan tΓ’m & chΓΊc bαΊ‘n hα»c tαΊp hiα»u quαΊ£! Have a nice day <3!!









