欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)通信方法及裝置與流程

文檔序號:12469778閱讀:248來源:國知局
數(shù)據(jù)通信方法及裝置與流程

本發(fā)明涉及計算機通信技術領域,尤其涉及一種數(shù)據(jù)通信方法及裝置。



背景技術:

消息隊列系統(tǒng)RabbitMQ(Rabbit Message Queue)包括消息隊列服務器RabbitMQ Server和消費客戶端RabbitMQ Client,其中,消息隊列服務器中配置有消息隊列Queue。消息隊列服務器在對消息進行消費處理時,將消息保存于消息隊列中,供之后消費客戶端消費消息隊列中的消息。由于消息可能會消費成功,也可能會消費失敗,在消息消費失敗時,消費客戶端會將消息發(fā)送至消息隊列服務器,消息隊列服務器在接收到消費失敗的消息時,立即對該消費失敗的消息重新投遞至消費客戶端繼續(xù)進行消費處理,直至該消息消費成功,這就會造成一直對該消息進行多次消費處理,此過程中其他消息的消費處理就受到了阻礙,導致消息隊列服務器的消息處理效率不高。



技術實現(xiàn)要素:

本發(fā)明的主要目的在于提供一種數(shù)據(jù)通信方法和裝置,旨在解決消息隊列服務器的消息處理效率不高的技術問題。

為實現(xiàn)上述目的,本發(fā)明提供一種數(shù)據(jù)通信方法,所述數(shù)據(jù)通信方法包括以下步驟:

接收消費客戶端發(fā)送的消息對應的狀態(tài)值,其中,所述消費客戶端在對消息進行業(yè)務邏輯處理完成時,返回處理結果的狀態(tài)值,所述狀態(tài)值包括成功、稍后重試、失敗丟棄;

當所述狀態(tài)值為稍后重試時,調用延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列;

在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至重試消息隊列。

優(yōu)選地,所述接收消費客戶端發(fā)送的消息對應的狀態(tài)值的步驟之前,還包括:

將所述消息發(fā)送至所述消費客戶端,以供所述消費客戶端對所述消息進行業(yè)務邏輯處理,并通過回調函數(shù)返回處理結果的狀態(tài)值;

所述當所述狀態(tài)值為稍后重試時,調用延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列的步驟包括:

當所述狀態(tài)值為稍后重試時,根據(jù)所述消息的消息頭設置的重試次數(shù),選擇所述消息要發(fā)回的延遲交換機,并將所述消息發(fā)回選擇的所述延遲消息交換機;

調用所述延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列。

優(yōu)選地,所述當所述狀態(tài)值為稍后重試時,根據(jù)所述消息的消息頭設置的重試次數(shù),選擇所述消息要發(fā)回的延遲交換機的步驟包括:

當所述狀態(tài)值為稍后重試時,判斷所述消息的消息頭設置的重試次數(shù)是否小于預設的重試次數(shù)閾值;

在所述重試次數(shù)小于所述重試次數(shù)閾值時,根據(jù)所述重試次數(shù)選擇所述消息要發(fā)回的延遲交換機。

優(yōu)選地,所述當所述狀態(tài)值為稍后重試時,判斷所述消息的消息頭設置的重試次數(shù)是否小于預設的重試次數(shù)閾值的步驟之后,還包括:

在所述重試次數(shù)大于所述重試次數(shù)閾值時,將所述消息發(fā)送至死信消息隊列。

優(yōu)選地,所述在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至重試消息隊列的步驟包括:

在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至所述延遲消息隊列對應的重試消息交換機,并通過所述重試消息交換機將所述消息發(fā)送至所述重試消息隊列。

此外,為實現(xiàn)上述目的,本發(fā)明還提出一種數(shù)據(jù)通信裝置,所述數(shù)據(jù)通信裝置包括:

接收模塊,用于接收消費客戶端發(fā)送的消息對應的狀態(tài)值,其中,所述消費客戶端在對消息進行業(yè)務邏輯處理完成時,返回處理結果的狀態(tài)值,所述狀態(tài)值包括成功、稍后重試、失敗丟棄;

發(fā)送模塊,用于當所述狀態(tài)值為稍后重試時,調用延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列;

處理模塊,用于在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至重試消息隊列。

優(yōu)選地,所述發(fā)送模塊還用于:

將所述消息發(fā)送至所述消費客戶端,以供所述消費客戶端對所述消息進行業(yè)務邏輯處理,并通過回調函數(shù)返回處理結果的狀態(tài)值;

以及當所述狀態(tài)值為稍后重試時,根據(jù)所述消息的消息頭設置的重試次數(shù),選擇所述消息要發(fā)回的延遲交換機,將所述消息發(fā)回選擇的所述延遲消息交換機,并調用所述延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列。

優(yōu)選地,所述發(fā)送模塊包括:

判斷單元,用于當所述狀態(tài)值為稍后重試時,判斷所述消息的消息頭設置的重試次數(shù)是否小于預設的重試次數(shù)閾值;

選擇單元,用于在所述重試次數(shù)小于所述重試次數(shù)閾值時,根據(jù)所述重試次數(shù)選擇所述消息要發(fā)回的延遲交換機。

優(yōu)選地,所述發(fā)送模塊還用于:

在所述重試次數(shù)大于所述重試次數(shù)閾值時,將所述消息發(fā)送至死信消息隊列。

優(yōu)選地,所述處理模塊用于:

在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至所述延遲消息隊列對應的重試消息交換機,并通過所述重試消息交換機將所述消息發(fā)送至所述重試消息隊列。

本發(fā)明提出的數(shù)據(jù)通信方法及裝置,當接收到消費客戶端發(fā)送的消息對應的狀態(tài)值為稍后重試時,調用延遲消息交換機將該消息發(fā)送至延遲消息交換機對應的延遲消息隊列,并在歷時該延遲消息隊列對應的預設延遲時間后,將該消息發(fā)送至重試消息隊列,供消費客戶端對重試消息隊列中的該消息進行消費。也即在消息消費失敗時,并不是立即對該消息再次重新進行消費,直至該消息消費成功,而是經(jīng)過一段延遲時間后再對該消息進行消費,在該延遲時間內,可以對其他消息進行消費處理,因此,提高了消息隊列服務器的消息處理效率。

附圖說明

圖1為本發(fā)明數(shù)據(jù)通信方法第一實施例的流程示意圖;

圖2為本發(fā)明數(shù)據(jù)通信方法第二實施例中當所述狀態(tài)值為稍后重試時,調用延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列的細化流程示意圖;

圖3為本發(fā)明數(shù)據(jù)通信裝置第一實施例的功能模塊示意圖;

圖4為本發(fā)明數(shù)據(jù)通信裝置第二實施例中發(fā)送模塊的細化功能模塊示意圖。

具體實施方式

應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

本發(fā)明提供一種數(shù)據(jù)通信方法。參照圖1,圖1為本發(fā)明數(shù)據(jù)通信方法第一實施例的流程示意圖。在本實施例中,所述數(shù)據(jù)通信方法包括以下步驟:

步驟S10,接收消費客戶端發(fā)送的消息對應的狀態(tài)值,其中,所述消費客戶端在對消息進行業(yè)務邏輯處理完成時,返回處理結果的狀態(tài)值,所述狀態(tài)值包括成功、稍后重試、失敗丟棄;

消息隊列系統(tǒng)RabbitMQ(Rabbit Message Queue)包括消息隊列服務器RabbitMQ Server和消費客戶端RabbitMQ Client,其中,消息隊列服務器RabbitMQ Server中配置有延遲消息交換機Delay Exchange、重試消息交換機Redelivery Exchange、延遲消息隊列Delay Queue、重試消息隊列Retry Queue、死信消息隊列Dead Letter Queue等。當消費客戶端RabbitMQ Client對消息隊列服務器RabbitMQ Server中的消息進行業(yè)務邏輯處理時,可能會消費成功,也有可能會消費失敗。在對消息進行業(yè)務邏輯處理完成時,消費客戶端RabbitMQ Client向消息隊列服務器RabbitMQ Server返回對消息進行業(yè)務邏輯處理結果的狀態(tài)值。其中,對消息進行業(yè)務邏輯處理結果的狀態(tài)值包括成功、稍后重試、失敗丟棄等等。例如,當消費客戶端RabbitMQ Client消費消息失敗時,消費客戶端RabbitMQ Client將該消息發(fā)送至消息隊列服務器RabbitMQ Server,并向消息隊列服務器RabbitMQ Server返回稍后重試的狀態(tài)值。消息隊列服務器RabbitMQ Server接收消費客戶端RabbitMQ Client發(fā)送的消息以及對消息進行業(yè)務邏輯處理結果的狀態(tài)值。

步驟S20,當所述狀態(tài)值為稍后重試時,調用延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列;

本實施例中,延遲消息交換機Delay Exchange與延遲消息隊列Delay Queue具有綁定的對應關系。當消息隊列服務器RabbitMQ Server接收到消費客戶端RabbitMQ Client發(fā)送的對消息進行業(yè)務邏輯處理結果的狀態(tài)值為稍后重試時,消息隊列服務器RabbitMQ Server調用延遲消息交換機Delay Exchange將消息發(fā)送至延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue。其中,延遲消息隊列Delay Queue對應有一個預設延遲時間。在未到達延遲時間時,延遲消息隊列Delay Queue中的消息無法進行提取、投遞等處理,只有當?shù)竭_延遲時間時,才能提取延遲消息隊列Delay Queue中的消息。

步驟S30,在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至重試消息隊列。

當消息隊列服務器RabbitMQ Server調用延遲消息交換機Delay Exchange將該消息發(fā)送至延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue,在歷時該延遲消息隊列Delay Queue對應的預設延遲時間之后,將該消息發(fā)送至重試消息隊列Retry Queue。本實施例中,默認訂閱重試消息隊列Retry Queue,當消息發(fā)送至重試消息隊列Retry Queue中之后,消費客戶端RabbitMQ Client即可獲取并消費該消息。若此次該消息還未消費成功,則消費客戶端RabbitMQ Client可繼續(xù)向消息隊列服務器RabbitMQ Server發(fā)送該消息以及稍后重試的狀態(tài)值,消息隊列服務器RabbitMQ Server再次執(zhí)行上述操作。在此過程中,由于消息是經(jīng)過一段的延遲時間后才發(fā)送至重試消息隊列Retry Queue的,在此期間,消息隊列服務器RabbitMQ Server可以對其他的消息進行消費處理操作。

具體地,所述步驟S30包括:

步驟a,在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至所述延遲消息隊列對應的重試消息交換機,并通過所述重試消息交換機將所述消息發(fā)送至所述重試消息隊列。

本實施例中,重試消息交換機Redelivery Exchange與延遲消息隊列Delay Queue建立有綁定關系。當消息隊列服務器RabbitMQ Server調用延遲消息交換機Delay Exchange將該消息發(fā)送至延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue,在歷時該延遲消息隊列Delay Queue對應的預設延遲時間之后,將該消息發(fā)送至與該延遲消息隊列Delay Queue有綁定關系的重試消息交換機Redelivery Exchange,通過該重試消息交換機Redelivery Exchange將該消息發(fā)送至重試消息隊列Retry Queue,供之后消費客戶端RabbitMQ Client獲取并消費該消息。

本實施例提供的方案,當接收到消費客戶端發(fā)送的消息對應的狀態(tài)值為稍后重試時,調用延遲消息交換機將該消息發(fā)送至延遲消息交換機對應的延遲消息隊列,并在歷時該延遲消息隊列對應的預設延遲時間后,將該消息發(fā)送至重試消息隊列,供消費客戶端對重試消息隊列中的該消息進行消費。也即在消息消費失敗時,并不是立即對該消息再次重新進行消費,直至該消息消費成功,而是經(jīng)過一段延遲時間后再對該消息進行消費,在該延遲時間內,可以對其他消息進行消費處理,因此,提高了消息隊列服務器的消息處理效率。同時,還降低了消息隊列服務器的負載,并通過重試消息隊列完成消費客戶端的轉態(tài)機模型。

進一步地,如圖2所示,基于第一實施例提出本發(fā)明數(shù)據(jù)通信方法第二實施例。在第二實施例中,所述步驟S10之前,還包括:

步驟b,將所述消息發(fā)送至所述消費客戶端,以供所述消費客戶端對所述消息進行業(yè)務邏輯處理,并通過回調函數(shù)返回處理結果的狀態(tài)值;

所述步驟S20包括:

步驟S21,當所述狀態(tài)值為稍后重試時,根據(jù)所述消息的消息頭設置的重試次數(shù),選擇所述消息要發(fā)回的延遲消息交換機,并將所述消息發(fā)回選擇的所述延遲消息交換機;

步驟S22,調用所述延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列。

在本實施例中,當消費客戶端RabbitMQ Client要消費消息隊列服務器RabbitMQ Server中的消息時,消息隊列服務器RabbitMQ Server將消息發(fā)送至消費客戶端RabbitMQ Client,消費客戶端RabbitMQ Client對該消息進行業(yè)務邏輯處理,并在對消息進行業(yè)務邏輯處理完成時,通過回調函數(shù)向消息隊列服務器RabbitMQ Server返回對消息進行業(yè)務邏輯處理結果的狀態(tài)值。當消費失敗時,消費客戶端RabbitMQ Client通過回調函數(shù)向消息隊列服務器RabbitMQ Server返回稍后重試的狀態(tài)值以及該消息。其中,該消息的消息頭中設置有消息的重試次數(shù)。

本實施例中,消息隊列服務器RabbitMQ Server中可配置多個延遲消息交換機Delay Exchange、多個重試消息交換機Redelivery Exchange和多個延遲消息隊列Delay Queue,其中,一個延遲消息交換機Delay Exchange與一個延遲消息隊列Delay Queue具有一一對應關系,一個延遲消息隊列Delay Queue與一個重試消息交換機Redelivery Exchange建立有綁定的一一對應關系。當消息隊列服務器RabbitMQ Server接收到稍后重試的狀態(tài)值以及該消息時,先根據(jù)該消息的消息頭設置的重試次數(shù),選擇該消息要發(fā)回的延遲交換機Delay Exchange。例如,在該消息的消息頭設置的重試次數(shù)為1時,選擇該消息要發(fā)回的延遲交換機Delay Exchange為Delay Exchange 1。然后,將該消息發(fā)回選擇的延遲消息交換機Delay Exchange,并將該消息發(fā)送至延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue。

進一步地,所述步驟S21包括:

步驟c,當所述狀態(tài)值為稍后重試時,判斷所述消息的消息頭設置的重試次數(shù)是否小于預設的重試次數(shù)閾值;

步驟e,在所述重試次數(shù)小于所述重試次數(shù)閾值時,根據(jù)所述重試次數(shù)選擇所述消息要發(fā)回的延遲交換機。

進一步地,在所述步驟c之后,還包括:

步驟e,在所述重試次數(shù)大于所述重試次數(shù)閾值時,將所述消息發(fā)送至死信消息隊列。

當對消息再次消費時,消息不一定會消費成功,有可能還是消費失敗,為了避免產(chǎn)生對某一個消息一直進行消費的死循環(huán),本實施例中,預先設置有消息的一個重試次數(shù)閾值,例如,設置該重試次數(shù)閾值為16,該重試次數(shù)閾值可以根據(jù)實際情況進行靈活設置,在此不作限制。當消息隊列服務器RabbitMQ Server接收到稍后重試的狀態(tài)值時,進一步判斷該消息的消息頭設置的重試次數(shù)是否小于預設的重試次數(shù)閾值。在該消息的消息頭設置的重試次數(shù)小于重試次數(shù)閾值時,也即說明該消息的消費次數(shù)還不多,此時,根據(jù)該消息的消息頭設置的重試次數(shù)選擇該消息要發(fā)回的延遲交換機Delay Exchange,將該消息發(fā)回選擇的延遲消息交換機Delay Exchange,并調用延遲消息交換機Delay Exchange將該消息發(fā)送至該延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue。當消息的消息頭設置的重試次數(shù)大于重試次數(shù)閾值時,也即說明該消息的消費次數(shù)已經(jīng)過多,此時,為了避免進入對該消息一直進行消費處理的死循環(huán),將該消息發(fā)送至死信消息隊列Dead Letter Queue。死信消息隊列Dead Letter Queue會永久保存該消費失敗的消息,后期業(yè)務監(jiān)控可通過提取死信消息隊列Dead Letter Queue中保存的消費失敗的消息進行相關處理操作。

進一步地,消息隊列服務器RabbitMQ Server中可配置多個重試消息隊列Retry Queue,每個重試消息隊列Retry Queue都有對應的重試消息隊列名稱Retry Queue name。并且,消息中攜帶有對應的重試消息隊列名稱Retry Queue name,當消息發(fā)送至重試消息交換機Redelivery Exchange中后,根據(jù)該消息中攜帶的重試消息隊列名稱Retry Queue name,將該消息發(fā)送至該重試消息隊列名稱Retry Queue name對應的重試消息隊列Retry Queue中,供之后消費客戶端RabbitMQ Client獲取并消費該消息。

本實施例提出的方案,在消息的消息頭設置的重試次數(shù)小于預設的重試次數(shù)閾值時,將該消息發(fā)送至選擇的延遲消息交換機,并調用該延遲消息交換機將該消息發(fā)送至對應的延遲消息隊列,對該消息重新進行消費處理,在消息的消息頭設置的重試次數(shù)大于預設的重試次數(shù)閾值時,直接將該消息發(fā)送至死信消息隊列,不再對該消息進行消費處理,避免了進入失敗消費的死循環(huán)過程,從而進一步提高了消息隊列服務器的消息處理效率。

本發(fā)明進一步提供一種數(shù)據(jù)通信裝置。參照圖3,圖3為本發(fā)明數(shù)據(jù)通信裝置第一實施例的功能模塊示意圖。

在本實施例中,所述數(shù)據(jù)通信裝置包括:

接收模塊10,用于接收消費客戶端發(fā)送的消息對應的狀態(tài)值,其中,所述消費客戶端在對消息進行業(yè)務邏輯處理完成時,返回處理結果的狀態(tài)值,所述狀態(tài)值包括成功、稍后重試、失敗丟棄;

消息隊列系統(tǒng)RabbitMQ(Rabbit Message Queue)包括消息隊列服務器RabbitMQ Server和消費客戶端RabbitMQ Client,其中,消息隊列服務器RabbitMQ Server中配置有延遲消息交換機Delay Exchange、重試消息交換機Redelivery Exchange、延遲消息隊列Delay Queue、重試消息隊列Retry Queue、死信消息隊列Dead Letter Queue等。當消費客戶端RabbitMQ Client對消息隊列服務器RabbitMQ Server中的消息進行業(yè)務邏輯處理時,可能會消費成功,也有可能會消費失敗。在對消息進行業(yè)務邏輯處理完成時,消費客戶端RabbitMQ Client向消息隊列服務器RabbitMQ Server返回對消息進行業(yè)務邏輯處理結果的狀態(tài)值。其中,對消息進行業(yè)務邏輯處理結果的狀態(tài)值包括成功、稍后重試、失敗丟棄等等。例如,當消費客戶端RabbitMQ Client消費消息失敗時,消費客戶端RabbitMQ Client將該消息發(fā)送至消息隊列服務器RabbitMQ Server,并向消息隊列服務器RabbitMQ Server返回稍后重試的狀態(tài)值。接收模塊10接收消費客戶端RabbitMQ Client發(fā)送的消息以及對消息進行業(yè)務邏輯處理結果的狀態(tài)值。

發(fā)送模塊20,用于當所述狀態(tài)值為稍后重試時,調用延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列;

本實施例中,延遲消息交換機Delay Exchange與延遲消息隊列Delay Queue具有綁定的對應關系。當接收模塊10接收到消費客戶端RabbitMQ Client發(fā)送的對消息進行業(yè)務邏輯處理結果的狀態(tài)值為稍后重試時,發(fā)送模塊20調用延遲消息交換機Delay Exchange將消息發(fā)送至延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue。其中,延遲消息隊列Delay Queue對應有一個預設延遲時間。在未到達延遲時間時,延遲消息隊列Delay Queue中的消息無法進行提取、投遞等處理,只有當?shù)竭_延遲時間時,才能提取延遲消息隊列Delay Queue中的消息。

處理模塊30,用于在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至重試消息隊列。

當發(fā)送模塊20調用延遲消息交換機Delay Exchange將該消息發(fā)送至延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue,在歷時該延遲消息隊列Delay Queue對應的預設延遲時間之后,處理模塊30將該消息發(fā)送至重試消息隊列Retry Queue。本實施例中,默認訂閱重試消息隊列Retry Queue,當消息發(fā)送至重試消息隊列Retry Queue中之后,消費客戶端RabbitMQ Client即可獲取并消費該消息。若此次該消息還未消費成功,則消費客戶端RabbitMQ Client可繼續(xù)向消息隊列服務器RabbitMQ Server發(fā)送該消息以及稍后重試的狀態(tài)值,發(fā)送模塊20再次執(zhí)行上述操作。在此過程中,由于消息是經(jīng)過一段的延遲時間后才發(fā)送至重試消息隊列Retry Queue的,在此期間,處理模塊30可以對其他的消息進行消費處理操作。

具體地,所述處理模塊30用于:

在歷時所述延遲消息隊列對應的預設延遲時間后,將所述消息發(fā)送至所述延遲消息隊列對應的重試消息交換機,并通過所述重試消息交換機將所述消息發(fā)送至所述重試消息隊列。

本實施例中,重試消息交換機Redelivery Exchange與延遲消息隊列Delay Queue建立有綁定關系。當發(fā)送模塊20調用延遲消息交換機Delay Exchange將該消息發(fā)送至延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue,在歷時該延遲消息隊列Delay Queue對應的預設延遲時間之后,處理模塊30將該消息發(fā)送至與該延遲消息隊列Delay Queue有綁定關系的重試消息交換機Redelivery Exchange,通過該重試消息交換機Redelivery Exchange將該消息發(fā)送至重試消息隊列Retry Queue,供之后消費客戶端RabbitMQ Client獲取并消費該消息。

本實施例提供的方案,當接收模塊10接收到消費客戶端發(fā)送的消息對應的狀態(tài)值為稍后重試時,發(fā)送模塊20調用延遲消息交換機將該消息發(fā)送至延遲消息交換機對應的延遲消息隊列,并在歷時該延遲消息隊列對應的預設延遲時間后,處理模塊30將該消息發(fā)送至重試消息隊列,供消費戶端對重試消息隊列中的該消息進行消費。也即在消息消費失敗時,并不是立即對該消息再次重新進行消費,直至該消息消費成功,而是經(jīng)過一段延遲時間后再對該消息進行消費,在該延遲時間內,可以對其他消息進行消費處理,因此,提高了消息隊列服務器的消息處理效率。同時,還降低了消息隊列服務器的負載,并通過重試消息隊列完成消費客戶端的轉態(tài)機模型。

進一步地,基于第一實施例提出本發(fā)明數(shù)據(jù)通信裝置第二實施例。在第二實施例中,所述發(fā)送模塊20還用于:

將所述消息發(fā)送至所述消費客戶端,以供所述消費客戶端對所述消息進行業(yè)務邏輯處理,并通過回調函數(shù)返回處理結果的狀態(tài)值;

以及當所述狀態(tài)值為稍后重試時,根據(jù)所述消息的消息頭設置的重試次數(shù),選擇所述消息要發(fā)回的延遲交換機,將所述消息發(fā)回選擇的所述延遲消息交換機,并調用所述延遲消息交換機將所述消息發(fā)送至所述延遲消息交換機對應的延遲消息隊列。

在本實施例中,當消費客戶端RabbitMQ Client要消費消息隊列服務器RabbitMQ Server中的消息時,發(fā)送模塊20將消息發(fā)送至消費客戶端RabbitMQ Client,消費客戶端RabbitMQ Client對該消息進行業(yè)務邏輯處理,并在對消息進行業(yè)務邏輯處理完成時,通過回調函數(shù)向消息隊列服務器RabbitMQ Server返回對消息進行業(yè)務邏輯處理結果的狀態(tài)值。當消費失敗時,消費客戶端RabbitMQ Client通過回調函數(shù)向消息隊列服務器RabbitMQ Server返回稍后重試的狀態(tài)值以及該消息。其中,該消息的消息頭中設置有消息的重試次數(shù)。

本實施例中,消息隊列服務器RabbitMQ Server中可配置多個延遲消息交換機Delay Exchange、多個重試消息交換機Redelivery Exchange和多個延遲消息隊列Delay Queue,其中,一個延遲消息交換機Delay Exchange與一個延遲消息隊列Delay Queue具有一一對應關系,一個延遲消息隊列Delay Queue與一個重試消息交換機Redelivery Exchange建立有綁定的一一對應關系。當接收模塊10接收到稍后重試的狀態(tài)值以及該消息時,發(fā)送模塊20先根據(jù)該消息的消息頭設置的重試次數(shù),選擇該消息要發(fā)回的延遲交換機Delay Exchange。例如,在該消息的消息頭設置的重試次數(shù)為1時,選擇該消息要發(fā)回的延遲交換機Delay Exchange為Delay Exchange 1。然后,將該消息發(fā)回選擇的延遲消息交換機Delay Exchange,并將該消息發(fā)送至延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue。

進一步地,本實施例中,如圖4所示,所述發(fā)送模塊20包括:

判斷單元21,用于當所述狀態(tài)值為稍后重試時,判斷所述消息的消息頭設置的重試次數(shù)是否小于預設的重試次數(shù)閾值;

選擇單元22,用于在所述重試次數(shù)小于所述重試次數(shù)閾值時,根據(jù)所述重試次數(shù)選擇所述消息要發(fā)回的延遲交換機。

進一步地,所述發(fā)送模塊20還用于:

在所述重試次數(shù)大于所述重試次數(shù)閾值時,將所述消息發(fā)送至死信消息隊列。

當對消息再次消費時,消息不一定會消費成功,有可能還是消費失敗,為了避免產(chǎn)生對某一個消息一直進行消費的死循環(huán),本實施例中,預先設置有消息的一個重試次數(shù)閾值,例如,設置該重試次數(shù)閾值為16,該重試次數(shù)閾值可以根據(jù)實際情況進行靈活設置,在此不作限制。當接收模塊10接收到稍后重試的狀態(tài)值以及消息時,判斷單元21判斷該消息的消息頭設置的重試次數(shù)是否小于預設的重試次數(shù)閾值。在該消息的消息頭設置的重試次數(shù)小于重試次數(shù)閾值時,也即說明該消息的消費次數(shù)還不多,此時,選擇單元22根據(jù)該消息的消息頭設置的重試次數(shù)選擇該消息要發(fā)回的延遲交換機Delay Exchange,發(fā)送模塊20將該消息發(fā)回選擇的延遲消息交換機Delay Exchange,并調用延遲消息交換機Delay Exchange將該消息發(fā)送至該延遲消息交換機Delay Exchange對應的延遲消息隊列Delay Queue。當消息的消息頭設置的重試次數(shù)大于重試次數(shù)閾值時,也即說明該消息的消費次數(shù)已經(jīng)過多,此時,為了避免進入對該消息一直進行消費處理的死循環(huán),發(fā)送模塊20將該消息發(fā)送至死信消息隊列Dead Letter Queue。死信消息隊列Dead Letter Queue會永久保存該消費失敗的消息,后期業(yè)務監(jiān)控可通過提取死信消息隊列Dead Letter Queue中保存的消費失敗的消息進行相關處理操作。

進一步地,消息隊列服務器RabbitMQ Server中可配置多個重試消息隊列Retry Queue,每個重試消息隊列Retry Queue都有對應的重試消息隊列名稱Retry Queue name。并且,消息中攜帶有對應的重試消息隊列名稱Retry Queue name,當消息發(fā)送至重試消息交換機Redelivery Exchange中后,根據(jù)該消息中攜帶的重試消息隊列名稱Retry Queue name,將該消息發(fā)送至該重試消息隊列名稱Retry Queue name對應的重試消息隊列Retry Queue中,供之后消費客戶端RabbitMQ Client獲取并消費該消息。

本實施例提出的方案,在消息的消息頭設置的重試次數(shù)小于預設的重試次數(shù)閾值時,發(fā)送模塊20將該消息發(fā)送至選擇的延遲消息交換機,并調用該延遲消息交換機將該消息發(fā)送至對應的延遲消息隊列,對該消息重新進行消費處理,在消息的消息頭設置的重試次數(shù)大于預設的重試次數(shù)閾值時,發(fā)送模塊20直接將該消息發(fā)送至死信消息隊列,不再對該消息進行消費處理,避免了進入失敗消費的死循環(huán)過程,從而進一步提高了消息隊列服務器的消息處理效率。

需要說明的是,在本文中,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。

上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。

以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
民勤县| 内江市| 枣强县| 怀宁县| 清丰县| 威信县| 开鲁县| 华容县| 深泽县| 陇川县| 武宁县| 安陆市| 瑞金市| 浦东新区| 桓仁| 定结县| 邛崃市| 青冈县| 云龙县| 淮南市| 多伦县| 楚雄市| 涟水县| 五指山市| 临朐县| 满城县| 平江县| 衡山县| 革吉县| 林州市| 伊吾县| 和田县| 桂平市| 竹山县| 南部县| 句容市| 乾安县| 日照市| 罗平县| 平安县| 龙胜|