非同步通訊rabbitmq 訊息重試

2021-08-20 18:13:36 字數 1814 閱讀 4891

目標:

利用rabbitmq實現訊息重試和失敗處理,實現可靠的消費消費。在訊息消費異常時,自動延時將訊息重試,當重試超過一定次數後,則列為異常訊息,等待後續特殊處理。

準備:

ttl:time-to-live,通過給訊息、佇列設定過期時間(單位:毫秒),來控制訊息、佇列的生命週期。在達到時間後,訊息會變成dead message。

dead letter exchanges:同普通的exchange無區別

訊息重制本質是通過訊息**來實現的。訊息**的觸發是:

這裡,我們使用expired來實現。給訊息設定ttl,到期後訊息未被消費,則會變成dead messager,**到dead letter exchange。

流程圖:

實現:

1、建立三個exchange。沒有特殊要求

2、建立三個queue。

clickqueue@retry作為重試佇列,需要特殊處理:

x-dead-letter-exchange:clickexchange

x-dead-letter-routing-key:clickkey

x-message-ttl:30000

3、處理**

public void 

retry() throws ioexception catch (exception e)

properties.builder().headers(headers);

rabbitutil.send(dqconstant.click_failed_exchange_name

, dqconstant.click_failed_routing_key

, properties, getresponse.getbody());

} else

properties.builder().headers(headers);

rabbitutil.send(dqconstant.click_retry_exchange_name

, dqconstant.click_retry_routing_key

, properties, getresponse.getbody());

} }

}if(null != getresponse)

}

private long 

getretrycount(amqp.basicproperties properties) }}

return retrycount;

}

4、x-death的使用:message在轉換成dead letter時,會在其header裡新增乙個名為x-death的陣列。陣列元素就是一次dead lettering event的記錄。包含count:訊息幾次變成了dead letter。

總結:

此處只是本人的拙見。如有更好的提議,歡迎拍磚。

RabbitMQ實戰 理解訊息通訊

前段時間總結完了 深入淺出mybatis 系列,對mybatis有了更全面和深入的了解,在掘金社群也收到了一些博友的喜歡,很高興。另外,短暫的陪產假就要結束了,小寶也二周了,下周二就要投入工作了,希望自己盡快調整過來,加油努力。從本篇開始總結 rabbitmq實戰 系列的閱讀筆記,rabbitmq是...

RabbitMQ實戰 理解訊息通訊

rabbitmq是乙個開源的訊息 和佇列伺服器,可以通過基本協議在完全不同的應用之間共享資料,可以將作業排隊以便讓分布式服務進行處理。本篇介紹下訊息通訊,首先介紹基礎概念,將這些概念對映到amqp協議,然後介紹訊息持久化 傳送方確認模式等訊息可靠性保證。通過本篇介紹,你會了解到 訊息通訊概念 此部分...

RabbitMQ (2) 理解訊息通訊

訊息包含兩部分 有效載荷 payload 和標籤 label 通道是建立在 真實的 tcp連線內的虛擬連線,amqp命令是通過通道傳送出去的 消費者通過以下兩種方式從特定的佇列中接收訊息 a.通過amqp的basic.consume命令訂閱 b.basic.get 確認a.basic.ack 顯示的...