Skip to content

fdhhhdjd/Class_RabbitMQ

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

59 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

01. Producer/Consumer

alt text

02. QUEUES

alt text

03. PUB/SUB

alt text

04. ROUTING

alt text

05. TOPICS

alt text

06. RPC ( Remote Procedure Call )

alt text

07. DLX ( Dead Letter Exchange )

alt text

08. EVENLY-DIST ( Evenly Distributing )

alt text

09. HEADERS

alt text

10. STREAM

         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚     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                β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


11. DELAYED

          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚   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   β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

12. DLX ( Dead Letter Exchange )

            +------------------+
            |   Producer       |
            | (DXL function)   |
            +--------+---------+
                     |
                     v
            +------------------+
            |  main_queue      |<-------------------+
            | (TTL = 5s)       |                    |
            | DLX = dlx_exchange                    |
            +--------+---------+                    |
                     |                              |
         (msg expired or rejected)                  |
                     |                              |
                     v                              |
            +------------------+                    |
            |  dlx_exchange    | (fanout exchange)  |
            +--------+---------+                    |
                     |                              |
                     v                              |
            +------------------+                    |
            | dead_letter_queue|--------------------+
            +------------------+


13. WORK ( New )

   +-------------+          +----------------+        +----------------+
   |             |   task   |                |        |                |
   |  Producer   +--------->+   Queue (tasks)+------->+  Worker 1      |
   |             |          |                |        | (Consumer)     |
   +-------------+          +----------------+        +----------------+
                                                      ^
                                                      |
                                                      |
                                                      v
                                               +----------------+
                                               |  Worker 2      |
                                               | (Consumer)     |
                                               +----------------+

14. TTL ( Time To Live )

   [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


15. PRIORITY

                +-------------------+
                |   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)


16. EMAIL-RETRY-DLX

                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚   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).

πŸ‘¨β€πŸ’» Author

Code Web KhΓ΄ng KhΓ³


πŸ“š DαΊ‘y Học Online

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

ThΓ΄ng Tin Đăng KΓ½


πŸ’– Donate Ủng Hα»™

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

QR Code NgΓ’n HΓ ng

QuΓ©t QR để α»§ng hα»™ nhanh:

QR Code ABBank

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

πŸ“ž LiΓͺn Hệ

CαΊ£m Ζ‘n bαΊ‘n Δ‘Γ£ quan tΓ’m & chΓΊc bαΊ‘n học tαΊ­p hiệu quαΊ£! Have a nice day <3!!

About

🐰 A practical RabbitMQ learning project demonstrating message queues, producers, consumers, and asynchronous communication using real-world examples. Designed to help developers understand how message brokers improve scalability, reliability, and decoupled system architecture.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Contributors