本發(fā)明涉及通信技術領域,特別涉及一種業(yè)務消息處理方法及裝置。
背景技術:
微服務應用是由一組微服務模塊構建的一個應用,各個微服務微模塊以獨立的進程運行,即各個微服務模塊獨立部署,并且,微服務模塊之間可以相互通信。
目前,微服務應用中的各個微服務模塊在進行業(yè)務消息處理過程中,各個微服務模塊之間主要通過rest(representationalstatetransfer,表述性狀態(tài)傳遞)方式和rpc(remoteprocedurecallprotocol,遠程過程調用協(xié)議)方式進行通信。
以各個微服務模塊之間通過rest方式進行通信為例。假設,微服務應用包括4個微服務模塊,分別為微服務模塊1、微服務模塊2、微服務模塊3和微服務模塊4,假設路由設備或者網關接收到來自客戶端的業(yè)務消息后,需要發(fā)往微服務模塊1處理,而微服務模塊1依據業(yè)務消息確定出需要微服務模塊2、微服務模塊3和微服務模塊4協(xié)同處理才能反饋給客戶端最終結果,而微服務模塊2又需要微服務模塊4協(xié)同處理,微服務模塊3也需要微服務模塊4協(xié)同處理。那么,微服務模塊1需要先與微服務模塊2交互,交互之后,微服務模塊2與微服務模塊4交互,微服務模塊2將交互后的處理結果反饋給微服務模塊1;微服務模塊1再與微服務模塊3交互,交互之后,微服務模塊3與微服務模塊4交互,微服務模塊3將交互后的處理結果反饋給微服務模塊1;微服務模塊1最后與微服務模塊4交互,微服務模塊4將交互后的處理結果反饋給微服務模塊1;最后,微服務模塊1依據收集的處理結果向客戶端反饋最終結果。上述4個微服務模塊通信交互如圖1所示。
可見,在上述這種業(yè)務消息處理過程中,各個微服務模塊之間需要協(xié)同處理時,相互依賴。一旦其中一個微服務模塊發(fā)生阻塞,就會造成整個業(yè)務處理失敗,容錯性較差;并且當微服務應用需要增加新功能對應的微服務模塊(微服務擴展)時,其他微服務模塊可能依賴于這個新擴展的微服務模塊,那么就需要改動這些微服務模塊的業(yè)務邏輯。隨著微服務的擴展,業(yè)務邏輯也需要不斷的隨著改變,微服務應用的擴展性不強。
技術實現要素:
本發(fā)明實施例的目的在于提供一種業(yè)務消息處理方法及裝置,以提高微服務應用的容錯性和擴展性。
為達到上述目的,本發(fā)明實施例公開了一種業(yè)務消息處理方法,應用于微服務模塊,所述微服務模塊所在的系統(tǒng)還包括消息調度模塊和消息總線,所述方法包括:
監(jiān)聽所述消息總線上發(fā)布的業(yè)務消息,所述業(yè)務消息為客戶端發(fā)送給所述消息調度模塊,并由所述消息調度模塊發(fā)布給所述消息總線的,或者為所述系統(tǒng)中的其他微服務模塊發(fā)布給所述消息總線的;
在所述業(yè)務消息的消息類型為所述微服務模塊在所述消息總線上訂閱的消息類型時,根據所述消息類型對所述業(yè)務消息進行處理;
將處理后得到的業(yè)務消息發(fā)布給所述消息總線,以使訂閱所述處理后得到的業(yè)務消息的消息類型的其他微服務模塊監(jiān)聽到所述處理后得到的業(yè)務消息時,處理所述處理后得到的業(yè)務消息,或者所述消息調度模塊確定所述處理后得到的業(yè)務消息為結果類消息時推送給所述客戶端。
為達到上述目的,本發(fā)明實施例公開了一種業(yè)務消息處理裝置,應用于微服務模塊,所述微服務模塊所在的系統(tǒng)還包括消息調度模塊和消息總線,所述裝置包括:監(jiān)聽單元、處理單元和發(fā)布單元,其中,
所述監(jiān)聽單元,用于監(jiān)聽所述消息總線上發(fā)布的業(yè)務消息,所述業(yè)務消息為客戶端發(fā)送給所述消息調度模塊,并由所述消息調度模塊發(fā)布給所述消息總線的,或者為所述系統(tǒng)中的其他微服務模塊發(fā)布給所述消息總線的;
所述處理單元,用于在所述業(yè)務消息的消息類型為所述微服務模塊在所述消息總線上訂閱的消息類型時,根據所述消息類型對所述業(yè)務消息進行處理;
所述發(fā)布單元,用于將處理后得到的業(yè)務消息發(fā)布給所述消息總線,以使訂閱所述處理后得到的業(yè)務消息的消息類型的其他微服務模塊監(jiān)聽到所述處理后得到的業(yè)務消息時,處理所述處理后得到的業(yè)務消息,或者所述消息調度模塊確定所述處理后得到的業(yè)務消息為結果類消息時推送給所述客戶端。
由上述的技術方案見可見,各個微服務模塊僅對自身微服務模塊在消息總線上訂閱的消息類型的業(yè)務消息進行處理。當某一個微服務模塊發(fā)生阻塞時,不會影響未訂閱該微服務模塊處理得到的業(yè)務消息的消息類型的其他微服務模塊的業(yè)務消息處理,可以保證局部/部分業(yè)務處理成功,避免了整個業(yè)務處理失敗,提高了微服務應用的容錯性。并且,當微服務應用擴展微服務模塊時,擴展的微服務模塊也僅需從消息總線上訂閱業(yè)務消息的消息類型,當消息總線上有擴展的微服務模塊訂閱的消息類型的業(yè)務消息時進行處理即可,無需修改其他所有微服務模塊的業(yè)務邏輯,或者僅修改少數微服務模塊的業(yè)務邏輯,提高了微服務應用的擴展性。
當然,實施本發(fā)明的任一產品或方法必不一定需要同時達到以上所述的所有優(yōu)點。
附圖說明
為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為現有技術提供的微服務模塊通信交互示意圖;
圖2為本發(fā)明實施例提供的微服務模塊所在的系統(tǒng)的結構示意圖;
圖3為本發(fā)明實施例提供的一種業(yè)務消息處理方法的流程示意圖;
圖4為本發(fā)明實施例提供的一種業(yè)務消息處理裝置的結構示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
為了解決現有技術問題,本發(fā)明實施例提供了一種業(yè)務消息處理方法及裝置。下面首先對本發(fā)明實施例所提供的一種業(yè)務消息處理方法進行介紹。
需要說明的是,本發(fā)明實施例提供的一種業(yè)務消息處理方法及裝置,優(yōu)選適用于微服務模塊,其中,微服務模塊所在的系統(tǒng)還包括消息調度模塊和消息總線。微服務模塊所在的系統(tǒng)的結構如圖2所示,圖2為本發(fā)明實施例提供的微服務模塊所在的系統(tǒng)的結構示意圖。微服務模塊所在的系統(tǒng)包括:消息調度模塊201、多個微服務模塊(例如,微服務模塊1、微服務模塊2、微服務模塊3……微服務模塊n)和消息總線202。
圖3為本發(fā)明實施例提供的一種業(yè)務消息處理方法的流程示意圖;該方法可以包括:
s301:監(jiān)聽所述消息總線上發(fā)布的業(yè)務消息。
其中,所述業(yè)務消息為客戶端發(fā)送給所述消息調度模塊,并由所述消息調度模塊發(fā)布給所述消息總線的,或者為所述系統(tǒng)中的其他微服務模塊發(fā)布給所述消息總線的。
在實際應用中,監(jiān)聽所述消息總線上發(fā)布的業(yè)務消息,可以通過amqp(advancedmessagequeuingprotocol,高級消息隊列協(xié)議)監(jiān)聽所述消息總線上發(fā)布的業(yè)務消息。
s302:在所述業(yè)務消息的消息類型為所述微服務模塊在所述消息總線上訂閱的消息類型時,根據所述消息類型對所述業(yè)務消息進行處理。
在實際應用中,根據所述消息類型對所述業(yè)務消息進行處理,可以在根據所述消息類型確定不需要其他微服務模塊協(xié)同處理時,對所述業(yè)務消息進行處理,得到對應的結果類消息;在根據所述消息類型確定需要其他微服務模塊協(xié)同處理時,確定需要協(xié)同處理的其他微服務模塊;構建消息類型為確定的微服務模塊訂閱的消息類型的業(yè)務消息;對所述業(yè)務消息進行處理,得到對應的結果類消息;將構建的業(yè)務消息和所述結果類消息作為處理后得到的業(yè)務消息。
s303:將處理后得到的業(yè)務消息發(fā)布給所述消息總線,以使訂閱所述處理后得到的業(yè)務消息的消息類型的其他微服務模塊監(jiān)聽到所述處理后得到的業(yè)務消息時,處理所述處理后得到的業(yè)務消息,或者所述消息調度模塊確定所述處理后得到的業(yè)務消息為結果類消息時推送給所述客戶端。
示例性的,假設圖2所示的微服務模塊所在的系統(tǒng)包括4個微服務模塊,分別為微服務模塊1、微服務模塊2、微服務模塊3和微服務模塊4。其中,假設微服務模塊1的業(yè)務需要微服務模塊2和微服務模塊3協(xié)助處理,微服務模塊2和微服務模塊3的業(yè)務又均需要微服務模塊4協(xié)助處理,在這種情形下,微服務模塊1、微服務模塊2、微服務模塊3和微服務模塊4均可以向消息總線202訂閱各模塊處理的業(yè)務消息的消息類型。
需要說明的是,微服務模塊1處理完自己需要處理的業(yè)務消息后得到的業(yè)務消息中會有微服務模塊2和微服務模塊3需要處理的消息類型的業(yè)務消息,微服務模塊2和微服務模塊3處理完各自需要處理的業(yè)務消息后得到的業(yè)務消息中會有微服務模塊4需要處理的消息類型的業(yè)務消息。
下面以微服務模塊1、微服務模塊2、微服務模塊3和微服務模塊4為例,對上述業(yè)務消息處理流程進行詳細說明。
首先,消息調度模塊201接收客戶端發(fā)送的業(yè)務消息1,并將業(yè)務消息1發(fā)布到消息總線202上。業(yè)務消息1中攜帶有客戶端標識和業(yè)務消息1對應的業(yè)務標識,以便消息調度模塊201后續(xù)監(jiān)聽到消息總線202上存在有結果類消息時,依據客戶端標識和業(yè)務標識,將結果類消息發(fā)送給相應的客戶端。
接下來,微服務模塊1監(jiān)聽到消息總線202上發(fā)布有需要自己處理的業(yè)務消息1(業(yè)務消息1的消息類型是微服務模塊1需要處理的),對業(yè)務消息1進行處理,得到結果類消息1.0、業(yè)務消息2(此消息是微服務模塊1根據業(yè)務消息1的消息類型確定需要微服務模塊2協(xié)同處理時構建的)和業(yè)務消息3(此消息是微服務模塊1根據業(yè)務消息1的消息類型確定需要微服務模塊3協(xié)同處理時構建的),并將結果類消息1.0、業(yè)務消息2和業(yè)務消息3發(fā)布到消息總線202上。
之后,消息調度模塊201監(jiān)聽到消息總線202上發(fā)布有結果類消息1.0,將結果類消息1.0發(fā)送給客戶端。
微服務模塊2監(jiān)聽到消息總線202上發(fā)布有需要自己處理的業(yè)務消息2(業(yè)務消息2的消息類型是微服務模塊2需要處理的),對業(yè)務消息2進行處理,得到結果類消息2.0和業(yè)務消息4(此消息是微服務模塊2根據業(yè)務消息2的消息類型確定需要微服務模塊4協(xié)同處理時構建的),并將結果類消息2.0和業(yè)務消息4發(fā)布到消息總線202上。
微服務模塊3監(jiān)聽到消息總線202上發(fā)布有需要自己處理的業(yè)務消息3(業(yè)務消息3的消息類型是微服務模塊3需要處理的),對業(yè)務消息3進行處理,得到結果類消息3.0和業(yè)務消息5(此消息是微服務模塊3根據業(yè)務消息3的消息類型確定需要微服務模塊4協(xié)同處理時構建的),并將結果類消息3.0和業(yè)務消息5發(fā)布到消息總線202上。
后續(xù)消息調度模塊201會監(jiān)聽到消息總線202上發(fā)布有結果類消息2.0和結果類消息3.0,并將其發(fā)送給客戶端。
微服務模塊4會監(jiān)聽到消息總線202上發(fā)布有需要自己處理的業(yè)務消息4和業(yè)務消息5(這兩個業(yè)務消息的消息類型是微服務模塊4需要處理的),對業(yè)務消息4和業(yè)務消息5進行處理,得到結果類消息4.0和結果類消息5.0,并將結果類消息4.0和結果類消息5.0發(fā)布到消息總線202上。
最后,消息調度模塊201監(jiān)聽到消息總線202上發(fā)布有結果類消息4.0和結果類消息5.0,并將其發(fā)送給客戶端。
應用本發(fā)明圖3所示實施例,各個微服務模塊僅對自身微服務模塊在消息總線上訂閱的消息類型的業(yè)務消息進行處理。當某一個微服務模塊發(fā)生阻塞時,不會影響未訂閱該微服務模塊處理得到的業(yè)務消息的消息類型的其他微服務模塊的業(yè)務消息處理,可以保證局部/部分業(yè)務處理成功,避免了整個業(yè)務處理失敗,提高了微服務應用的容錯性。并且,當微服務應用擴展微服務模塊時,擴展的微服務模塊也僅需從消息總線上訂閱業(yè)務消息的消息類型,當消息總線上有擴展的微服務模塊訂閱的消息類型的業(yè)務消息時進行處理即可,無需修改其他所有微服務模塊的業(yè)務邏輯,或者僅修改少數微服務模塊的業(yè)務邏輯,提高了微服務應用的擴展性。
與上述的方法實施相對應,本發(fā)明實施例還提供一種業(yè)務消息處理裝置。
圖4為本發(fā)明實施例提供的一種業(yè)務消息處理裝置的結構示意圖,該裝置可以包括:監(jiān)聽單元401、處理單元402和發(fā)布單元403,其中,
監(jiān)聽單元401,用于監(jiān)聽所述消息總線上發(fā)布的業(yè)務消息,所述業(yè)務消息為客戶端發(fā)送給所述消息調度模塊,并由所述消息調度模塊發(fā)布給所述消息總線的,或者為所述系統(tǒng)中的其他微服務模塊發(fā)布給所述消息總線的;
其中,本發(fā)明實施例提供的監(jiān)聽單元401,具體可以用于:
通過高級消息隊列協(xié)議監(jiān)聽所述消息總線上發(fā)布的業(yè)務消息。
處理單元402,用于在所述業(yè)務消息的消息類型為所述微服務模塊在所述消息總線上訂閱的消息類型時,根據所述消息類型對所述業(yè)務消息進行處理;
其中,本發(fā)明實施例提供的處理單元402,具體可以用于:
在所述業(yè)務消息的消息類型為所述微服務模塊在所述消息總線上訂閱的消息類型時,在根據所述消息類型確定不需要其他微服務模塊協(xié)同處理時,對所述業(yè)務消息進行處理,得到對應的結果類消息。
其中,本發(fā)明實施例提供的處理單元402,具體還可以用于:
在根據所述消息類型確定需要其他微服務模塊協(xié)同處理時,確定需要協(xié)同處理的其他微服務模塊;
構建消息類型為確定的微服務模塊訂閱的消息類型的業(yè)務消息;
對所述業(yè)務消息進行處理,得到對應的結果類消息;
將構建的業(yè)務消息和所述結果類消息作為處理后得到的業(yè)務消息。
發(fā)布單元403,用于將處理后得到的業(yè)務消息發(fā)布給所述消息總線,以使訂閱所述處理后得到的業(yè)務消息的消息類型的其他微服務模塊監(jiān)聽到所述處理后得到的業(yè)務消息時,處理所述處理后得到的業(yè)務消息,或者所述消息調度模塊確定所述處理后得到的業(yè)務消息為結果類消息時推送給所述客戶端。
優(yōu)選地,在本發(fā)明實施例中,監(jiān)聽單元監(jiān)聽到所述消息總線上需要微服務模塊處理的業(yè)務消息時,也可以將該業(yè)務消息發(fā)布到微服務模塊中的消息總線上,由相應的處理單元處理之后再通過微服務模塊中的消息總線發(fā)布到所述消息總線上。
應用本發(fā)明圖4所示實施例,各個微服務模塊僅對自身微服務模塊在消息總線上訂閱的消息類型的業(yè)務消息進行處理。當某一個微服務模塊發(fā)生阻塞時,不會影響未訂閱該微服務模塊處理得到的業(yè)務消息的消息類型的其他微服務模塊的業(yè)務消息處理,可以保證局部/部分業(yè)務處理成功,避免了整個業(yè)務處理失敗,提高了微服務應用的容錯性。并且,當微服務應用擴展微服務模塊時,擴展的微服務模塊也僅需從消息總線上訂閱業(yè)務消息的消息類型,當消息總線上有擴展的微服務模塊訂閱的消息類型的業(yè)務消息時進行處理即可,無需修改其他所有微服務模塊的業(yè)務邏輯,或者僅修改少數微服務模塊的業(yè)務邏輯,提高了微服務應用的擴展性。
需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
本說明書中的各個實施例均采用相關的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。
以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內。