在分散式系統中,可靠的消息傳遞對業務穩定運行至關重要
RabbitMQ 作為一種高效的消息隊列中間件,為消費者與伺服器之間提供了一套靈活的消息確認機制
BasicAck、BasicReject 和 BasicNack 用於確保消息不會因系統異常或處理失敗而丟失或重複消費
本文簡單紀錄 RabbitMQ 消費者的核心方法 HandleBasicDeliver,並說明配置用途
BasicAck
當消費者成功處理一條消息後,向 RabbitMQ 確認該消息已被消費,隊列可以將消息刪除
避免消息重複投遞,確保消息已經被正確處理
void BasicAck(ulong deliveryTag, bool multiple);
若在 BasicConsume 中設置了 autoAck = true,則無需手動調用 BasicAck
但這會導致 RabbitMQ 自動認為消息已成功處理,可能導致消息丟失
DeliveryTag
用於標識消息的唯一標籤,RabbitMQ 用它來追蹤消息
消費者在收到消息時,RabbitMQ 通過 HandleBasicDeliver 傳遞該標籤
Multiple
設置為 true:批量確認所有小於等於 deliveryTag 的消息
設置為 false:僅確認當前消息
BasicReject
用於拒絕特定的消息,並選擇是否重新投遞
當消費者無法處理某條消息時,拒絕該消息,並選擇是否讓 RabbitMQ 將消息重新投遞給其他消費者
當設置 requeue = true 時,消息可能被同一消費者再次接收到,應設計重試機制避免無限循環
DeliveryTag
消息的唯一標籤,用於標識要拒絕的消息
Requeue
設置為 true:將消息重新投遞到隊列,供其他消費者處理
設置為 false:直接丟棄消息,或將其送到死信隊列(若配置了 DLX)
BasicNack
用於拒絕多條消息,功能類似於 BasicReject,但支持批量操作
功能類似於 BasicReject,但支持一次拒絕多條消息
可用於批量處理未確認的消息
void BasicNack(ulong deliveryTag, bool multiple, bool requeue);
DeliveryTag
消息的唯一標籤,標識要拒絕的最後一條消息
Multiple
設置為 true:拒絕所有小於等於 deliveryTag 的消息
設置為 false:僅拒絕當前消息
Requeue
設置為 true:將消息重新投遞到隊列
設置為 false:丟棄消息或送入死信隊列
| 方法 | 功能 | 支持批量 | 是否重新投遞 | 適用場景 |
|---|---|---|---|---|
| BasicAck | 確認消息已成功處理 | 是 | 否 | 正常消息處理完成 |
| BasicReject | 拒絕單條消息 | 否 | 可選 | 單條消息無法處理 |
| BasicNack | 拒絕多條消息 | 是 | 可選 | 批量拒絕未處理消息 |
ketoconazole shampoo resource page
ketoconazole shampoo resource page
toradol explained
toradol explained
ketorolac tromethamine profile
ketorolac tromethamine profile
minoxidil 2% vs 5% full review
minoxidil 2% vs 5% full review
sildenafil mechanism overview
sildenafil mechanism overview
vardenafil priapism risk groups
vardenafil priapism risk groups
vardenafil food‑related factors
vardenafil food‑related factors
sinusitis clinical overview
sinusitis clinical overview
Brand vs Generic Therapeutic Equivalence
Brand vs Generic Therapeutic Equivalence