.NET RabbitMQ Client HandleBasicDeliver 屬性配置

在分散式系統中,可靠的消息傳遞對業務穩定運行至關重要
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拒絕多條消息可選批量拒絕未處理消息
訂閱
通知
guest
0 留言
預約回饋
查看所有留言