一種基於Redis的RPC通信方法與流程
2023-04-27 17:10:26 2

本發明涉及服務端分布式架構領域,尤其涉及一種基於redis的rpc通信方法。
背景技術:
目前,集群伺服器中,兩個伺服器之間需要進行遠程調用時,一般採用如下方法:給每兩個可能發生rpc通信的服務建立網絡連接,然後通過tcp或udp協議傳遞需要調用的方法名和參數。
然而,這種網狀連接結構在大規模集群網絡中會呈現如下弊端,其一,它增加了服務端架構的複雜性,使得服務端的調試和維護難度很高;其二,由於網絡不穩定,出現調用失敗的可能性較高。
技術實現要素:
本發明的目的在於提供一種基於redis的rpc通信方法,從而解決現有技術中存在的前述問題。
為了實現上述目的,本發明採用的技術方案如下:
一種基於redis的rpc通信方法,包括如下步驟:
s1,建立調用端伺服器與redis伺服器之間的連接,獲取唯一的id;
s2,所述調用端伺服器根據所述唯一的id,訂閱對應頻道;
s3,被調用端伺服器向所述redis伺服器發送rpc數據;
s4,所述redis伺服器將接收到的rpc數據通過s2中訂閱的所述對應頻道轉發給所述調用端伺服器;
s5,所述調用端伺服器接收到redis轉發的rpc數據後對其進行解析協議,並調用對應的方法,實現遠程調用。
優選地,s2中,所述訂閱對應頻道,具體為,通過redis服務的subscribe命令訂閱對應頻道。
優選地,s3具體為:被調用端伺服器通過redis的publish命令向所述redis伺服器發送rpc數據。
優選地,s3中,所述rpc數據為二進位的字符串數據,包含調用方法名和參數內容。
本發明的有益效果是:本發明實施例提供的一種基於redis的rpc通信方法,基於redis的publish命令和subscribe命令,將被調用端伺服器的rpc數據通過調用端伺服器的唯一的訂閱頻道轉發至調用端伺服器,解析後再調用對應的方法,實現遠程調用,由於調用端伺服器和被調用端伺服器之間沒有直接建立連接關係,而是通過redis服務間接的建立連接,所以,具有很高的解耦性,能夠讓服務端集群結構變得簡單和清晰,同時避免了為每個服務端進程編寫rpc連接,提高了服務端程序的開發效率。
附圖說明
圖1是本發明實施例提供的基於redis的rpc通信方法的流程示意圖;
圖2是調用端伺服器的工作流程示意圖。
具體實施方式
為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施方式僅僅用以解釋本發明,並不用於限定本發明。
如圖1-2所示,本發明實施例提供了一種基於redis的rpc通信方法,包括如下步驟:
s1,建立調用端伺服器與redis伺服器之間的連接,獲取唯一的id;
s2,所述調用端伺服器根據所述唯一的id,訂閱對應頻道;
s3,被調用端伺服器向所述redis伺服器發送rpc數據;
s4,所述redis伺服器將接收到的rpc數據通過s2中訂閱的所述對應頻道轉發給所述調用端伺服器;
s5,所述調用端伺服器接收到redis轉發的rpc數據後對其進行解析協議,並調用對應的方法,實現遠程調用。
其中,s2中,所述訂閱對應頻道,具體可以為,通過redis服務的subscribe命令訂閱對應頻道。
s3具體可以為:被調用端伺服器通過redis的publish命令向所述redis伺服器發送rpc數據。
s3中,所述rpc數據為二進位的字符串數據,包含調用方法名和參數內容。
其中,rpc(remoteprocedurecallprotocol)為遠程過程調用協議。
本發明提供的上述方法的原理是:給每個服務命名,通過redis的subscribe命令訂閱自身對應的頻道,當需要遠程調用時,通過reids的publish命令給對應進程的頻道發送數據。當服務端進程收到reids轉發的數據後,解析這些數據,並使用解析出來的方法名和參數去執行對應的方法。
在具體實施過程中,上述方法可分為服務初始化階段、rpc調用、rpc處理三個階段。其中服務初始化階段為服務端程序開啟時,建立redis連接,並通過redis的subscribe命令訂閱該服務對應的頻道。rpc調用階段為服務端程序向另一個服務端程序發起rpc調用,主要是通過redis的publish命令向redis發送rpc數據,通過redis將該數據轉發給對應服務。rpc處理階段為接受rpc調用的服務處理rpc數據,並做相應處理的過程。
上述三個階段的具體實現方式為:
1、訂閱頻道
訂閱頻道階段為程序連接redis並發出subscribe命令的過程,具體可以分為3個步驟。
(1)根據配置文件或啟動參數,確定每個服務的唯一id;
(2)服務程序與redis建立連接;
(3)服務程序通過subscribe命令,訂閱自身id的頻道。
2、發送rpc數據
需要調用rpc協議的服務通過redis的publish命令給redis發送rpc數據,rpc數據為二進位的字符串數據,包含了調用方法名、參數等內容。一種可能的數據格式如下表所示:
被調用端將以上協議格式(或其他類似協議)的二進位數據,通過redis的publish命令發送到調用端id所對應的頻道。redis將會把數據轉發到訂閱對應頻道的服務端程序上,即調用端上。
3、rpc處理
調用端收到redis轉發的數據後,先解析協議,將方法名和各個參數解析出來,然後調用對應的方法,實現遠程調用。如若調用端需要回應被調用端,調用端亦可通過publish命名向被調用端推送數據。
上述方法中,伺服器集群包含各個服務端程序,以及一個redis服務(或redis集群),服務端程序之間並不相互連接,通過redis轉發消息,實現rpc調用。
通過採用本發明公開的上述技術方案,得到了如下有益的效果:本發明實施例提供的一種基於redis的rpc通信方法,基於redis的publish命令和subscribe命令,將被調用端伺服器的rpc數據通過調用端伺服器的唯一的訂閱頻道轉發至調用端伺服器,解析後再調用對應的方法,實現遠程調用,由於調用端伺服器和被調用端伺服器之間沒有直接建立連接關係,而是通過redis服務間接的建立連接,所以,具有很高的解耦性,能夠讓服務端集群結構變得簡單和清晰,同時避免了為每個服務端進程編寫rpc連接,提高了服務端程序的開發效率。
本說明書中的各個實施例均採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
本領域人員應該理解的是,上述實施例提供的方法步驟的時序可根據實際情況進行適應性調整,也可根據實際情況並發進行。
上述實施例涉及的方法中的全部或部分步驟可以通過程序來指令相關的硬體來完成,所述的程序可以存儲於計算機設備可讀取的存儲介質中,用於執行上述各實施例方法所述的全部或部分步驟。所述計算機設備,例如:個人計算機、伺服器、網絡設備、智能移動終端、智能家居設備、穿戴式智能設備、車載智能設備等;所述的存儲介質,例如:ram、rom、磁碟、磁帶、光碟、快閃記憶體、u盤、移動硬碟、存儲卡、記憶棒、網絡伺服器存儲、網絡雲存儲等。
最後,還需要說明的是,在本文中,諸如第一和第二等之類的關係術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關係或者順序。而且,術語「包括」、「包含」或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句「包括一個……」限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
以上所述僅是本發明的優選實施方式,應當指出,對於本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視本發明的保護範圍。