延時佇列(RabbitMQ)

LL。。。發表於2024-10-24

1.概述

延時任務,也叫延遲任務

延遲佇列:沒有固定的開始時間,它常常是由一個事件觸發的,而在這個事件觸發之後的一段時間內觸發另一個事件,任務可以立即執行,也可以延遲。

2.技術選型

RabbitMQ(死信交換機)實現方式 TTL+私信交換機

1.概述

死信佇列:存放死信的佇列

死信交換機: 繫結死信佇列的交換機

2.成為死信的幾種情況

消費者使用 basic.reject 或 basic.nack 宣告消費失敗,並且訊息的 requeue 引數設定為false - 消費者消費訊息失敗,並且不把訊息重回佇列

訊息設定了過期時間,或者訊息存放的佇列設定了過期時間,超過時間無人消費 - 訊息和佇列如果同時都設定了過期時間,以時間短的為準

要投遞的佇列訊息滿了,無法投遞

3.死信交換機

1.概述

如果這個包含死信的佇列配置了 dead-letter-exchange 屬性,指定了一個交換機,那麼正常佇列中的死信就會投遞到這個交換機中,而這個交換機稱為 死信交換機 (Dead Letter Exchange,檢查DLX)。

2.死信的路由過程

1、消費者拒絕消費訊息

2、佇列繫結了死信交換機

3、死信佇列有繫結的死信交換機

實現上述功能的條件

1、死信交換機的名稱

2、死信交換機與死信佇列繫結的 RoutingKey

3.TTL

1.概述

超時未消費,訊息變成死信的兩種情況
1、訊息所在的佇列設定了超時時間
2、訊息本身設定了超時時間
如果兩者都設定了,以短的時間為優先

2.原理圖

4.延時佇列

1、宣告死信交換機和死信佇列

2、宣告普通交換機和普通佇列、繫結關係

3、發訊息

不指定訊息過期時間

指定訊息過期時間

相關文章