两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

服務(wù)異步交互方法、設(shè)備、系統(tǒng)和可讀介質(zhì)與流程

文檔序號(hào):11206490閱讀:602來(lái)源:國(guó)知局
服務(wù)異步交互方法、設(shè)備、系統(tǒng)和可讀介質(zhì)與流程

本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及服務(wù)異步交互方法、設(shè)備、系統(tǒng)和可讀介質(zhì)。



背景技術(shù):

隨著一個(gè)系統(tǒng)的功能和內(nèi)容不斷壯大,單一的系統(tǒng)無(wú)法支撐日益增長(zhǎng)的用戶體量。微服務(wù)的概念也是在這種環(huán)境下產(chǎn)生的,它是指導(dǎo)一個(gè)系統(tǒng)如何劃分為一個(gè)個(gè)獨(dú)立的系統(tǒng),使服務(wù)之間相互解耦,從而提高服務(wù)的性能和穩(wěn)定性。但解耦首要解決的問(wèn)題是如何確保多個(gè)系統(tǒng)之間數(shù)據(jù)操作的一致性,也就是分布式事務(wù)如何保證最終一致性的方法。傳統(tǒng)的解決方法就是通過(guò)各個(gè)服務(wù)之間通過(guò)http請(qǐng)求進(jìn)行同步操作,如果只涉及到1至2個(gè)系統(tǒng)還可以穩(wěn)定運(yùn)行。但是一旦涉及到更多個(gè)系統(tǒng),則一旦某一個(gè)系統(tǒng)出問(wèn)題,會(huì)導(dǎo)致其他系統(tǒng)也會(huì)受到牽連。



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

本發(fā)明的主要目的是提供服務(wù)異步交互方法、設(shè)備、系統(tǒng)和可讀介質(zhì),旨在增加系統(tǒng)之間同步操作的穩(wěn)定性。

為實(shí)現(xiàn)上述目的,本發(fā)明提出的一種服務(wù)異步交互方法,用于多系統(tǒng)之間業(yè)務(wù)交互,所述服務(wù)異步交互方法包括如下步驟:

在接收到需要與另一系統(tǒng)進(jìn)行業(yè)務(wù)交互的業(yè)務(wù)指令時(shí),根據(jù)所述業(yè)務(wù)指令執(zhí)行本地相關(guān)業(yè)務(wù)操作;

在所述業(yè)務(wù)操作成功時(shí),調(diào)用消息通知與接收模塊,來(lái)將所述業(yè)務(wù)操作的傳遞信息封裝為通信消息,所述通信消息包括消息事務(wù)id以及消息發(fā)送和接受協(xié)議;

將所述通信消息發(fā)送至與所述另一系統(tǒng)之間部署的消息隊(duì)列,用以通過(guò)所述消息隊(duì)列發(fā)送至所述另一系統(tǒng)。

優(yōu)選的,在所述業(yè)務(wù)操作成功時(shí),所述服務(wù)異步交互方法還包括步驟:

在預(yù)設(shè)消息記錄表中記錄所述業(yè)務(wù)操作的業(yè)務(wù)操作消息,其中,所述業(yè)務(wù)操作消息包括所述消息事務(wù)id和推送狀態(tài);

在接收到來(lái)自所述另一系統(tǒng)針對(duì)所述通信消息返回的返回消息時(shí),根據(jù)所述返回消息更新所述業(yè)務(wù)操作消息的推送狀態(tài)。

優(yōu)選的,所述服務(wù)異步交互方法還包括如下步驟:

定時(shí)輪詢所述消息記錄表,查詢推送狀態(tài)為失敗的通信消息;

在查詢到推送狀態(tài)為失敗的通信消息時(shí),對(duì)所述推送狀態(tài)為失敗的通信消息進(jìn)行重新發(fā)送。

優(yōu)選的,所述消息隊(duì)列采用兔子消息隊(duì)列rabbitmq。

本發(fā)明提供的一種服務(wù)異步交互設(shè)備,所述服務(wù)異步交互設(shè)備包括處理器、存儲(chǔ)器和儲(chǔ)存于所述儲(chǔ)存器上的并可在處理器上運(yùn)行的服務(wù)異步交互程序;所述服務(wù)異步交互程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)上述的服務(wù)異步交互方法的步驟。

本發(fā)明提供的可讀介質(zhì),用于計(jì)算機(jī)讀取,所述可讀介質(zhì)上存儲(chǔ)有服務(wù)異步交互程序,所述服務(wù)異步交互程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述的服務(wù)異步交互方法的步驟。

本發(fā)明提供的一種服務(wù)異步交互系統(tǒng),包括處理器、存儲(chǔ)器和儲(chǔ)存于所述儲(chǔ)存器上的用以實(shí)現(xiàn)多種服務(wù)的多個(gè)系統(tǒng),所述服務(wù)異步交互系統(tǒng)還包括儲(chǔ)存在所述儲(chǔ)存器上的用于部署在多個(gè)所述系統(tǒng)之間的消息隊(duì)列集群;

所述系統(tǒng)在被所述處理器執(zhí)行時(shí),實(shí)現(xiàn)如下步驟:

在接收到需要與另一系統(tǒng)進(jìn)行業(yè)務(wù)交互的業(yè)務(wù)指令時(shí),根據(jù)所述業(yè)務(wù)指令執(zhí)行相關(guān)業(yè)務(wù)操作;

在所述業(yè)務(wù)操作成功時(shí),調(diào)用消息通知與接收模塊,來(lái)將所述業(yè)務(wù)操作的傳遞信息封裝為通信消息,所述通信消息包括消息事務(wù)id以及消息發(fā)送和接受協(xié)議;

將所述通信消息發(fā)送至與另一系統(tǒng)之間部署的消息隊(duì)列,用以通過(guò)所述消息隊(duì)列發(fā)送至另一系統(tǒng);

所述系統(tǒng)在被所述處理器執(zhí)行時(shí),還包括實(shí)現(xiàn)如下步驟:

接受來(lái)自另一系統(tǒng)的通信消息;

根據(jù)所述通信消息進(jìn)行處理,并且在處理完畢時(shí)將處理結(jié)果封裝為包括消息發(fā)送和接受協(xié)議的返回消息;

將所述返回消息發(fā)送至所述消息隊(duì)列,用以通過(guò)所述消息隊(duì)列發(fā)送至另一系統(tǒng);

所述消息隊(duì)列集群在被所述處理器執(zhí)行時(shí),實(shí)現(xiàn)如下步驟:

在接收到所述系統(tǒng)的通信消息以及返回消息時(shí),通過(guò)每個(gè)所述系統(tǒng)之間業(yè)務(wù)交互所分別使用的一個(gè)指定消息隊(duì)列來(lái)發(fā)送所述通信消息以及返回消息。

優(yōu)選的,所述消息隊(duì)列集群在被所述處理器執(zhí)行時(shí),還包括實(shí)現(xiàn)消息隊(duì)列的持久化。

優(yōu)選的,所述一系統(tǒng)在被所述處理器執(zhí)行時(shí),還實(shí)現(xiàn)如下步驟:

在所述業(yè)務(wù)操作成功時(shí),在預(yù)設(shè)消息記錄表中記錄所述業(yè)務(wù)操作的業(yè)務(wù)操作消息,其中,所述業(yè)務(wù)操作消息包括所述消息事務(wù)id和推送狀態(tài);

在接收到來(lái)自另一系統(tǒng)針對(duì)所述通信消息返回的返回消息時(shí),根據(jù)所述返回消息更新所述業(yè)務(wù)操作消息的推送狀態(tài)。

優(yōu)選的,所述一系統(tǒng)在被所述處理器執(zhí)行時(shí),還實(shí)現(xiàn)如下步驟:

定時(shí)輪詢所述消息記錄表,查詢推送狀態(tài)為失敗的通信消息;

在查詢到推送狀態(tài)為失敗的通信消息時(shí),對(duì)所述推送狀態(tài)為失敗的通信消息進(jìn)行重新發(fā)送。

本發(fā)明所提供的服務(wù)異步交互方法、設(shè)備、系統(tǒng)和可讀介質(zhì),通過(guò)設(shè)置功能單一的系統(tǒng),本地執(zhí)行其業(yè)務(wù),并且將傳遞信息通過(guò)封裝并且通過(guò)消息隊(duì)列傳遞至目標(biāo)系統(tǒng),則是各自在本地進(jìn)行本地的業(yè)務(wù)邏輯操作,再將結(jié)果通過(guò)消息隊(duì)列的方式發(fā)送至另一系統(tǒng)。相對(duì)于通過(guò)http實(shí)現(xiàn)系統(tǒng)間的同步,本實(shí)施例實(shí)現(xiàn)了系統(tǒng)之間的異步交互,能夠增強(qiáng)系統(tǒng)的穩(wěn)定性;進(jìn)一步的,通過(guò)rabbitmq可以讓各個(gè)系統(tǒng)的服務(wù)業(yè)務(wù)之間解耦,無(wú)需復(fù)雜的http調(diào)用接口驗(yàn)證。

附圖說(shuō)明

為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖示出的結(jié)構(gòu)獲得其他的附圖。

圖1為本發(fā)明服務(wù)異步交互方法第一實(shí)施例的流程圖;

圖2為本發(fā)明服務(wù)異步交互方法第二實(shí)施例的流程圖;

圖3為本發(fā)明服務(wù)異步交互方法第三實(shí)施例的流程圖;

圖4為本發(fā)明服務(wù)異步交互設(shè)備一實(shí)施例的模塊示意圖;

圖5為本發(fā)明可讀介質(zhì)一實(shí)施例的模塊示意圖;

圖6為本發(fā)明服務(wù)異步交互系統(tǒng)一實(shí)施例的模塊示意圖。

本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。

具體實(shí)施方式

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

請(qǐng)參看圖1,本發(fā)明服務(wù)異步交互方法第一實(shí)施例,用于多系統(tǒng)之間業(yè)務(wù)交互,所述服務(wù)異步交互方法包括如下步驟:

步驟s101,在接收到需要與另一系統(tǒng)進(jìn)行業(yè)務(wù)交互的業(yè)務(wù)指令時(shí),根據(jù)所述業(yè)務(wù)指令執(zhí)行本地相關(guān)業(yè)務(wù)操作。

例如,當(dāng)用戶在領(lǐng)券系統(tǒng)內(nèi)激活了領(lǐng)券業(yè)務(wù),則領(lǐng)券系統(tǒng)執(zhí)行該領(lǐng)券的業(yè)務(wù);而該領(lǐng)券的業(yè)務(wù)將用于訂單系統(tǒng),用于在訂單系統(tǒng)內(nèi)實(shí)施現(xiàn)金抵扣業(yè)務(wù)。則上述的領(lǐng)券業(yè)務(wù)需要與訂單系統(tǒng)進(jìn)行業(yè)務(wù)交互。當(dāng)領(lǐng)券系統(tǒng)接收到執(zhí)行領(lǐng)券業(yè)務(wù)指令時(shí),其在本地執(zhí)行該業(yè)務(wù)直至該業(yè)務(wù)結(jié)束,例如向用戶展現(xiàn)領(lǐng)券動(dòng)畫,以及領(lǐng)券金額,以及領(lǐng)券成功的提示等等。

步驟s102,在所述業(yè)務(wù)操作成功時(shí),調(diào)用消息通知與接收模塊,來(lái)將所述業(yè)務(wù)操作的傳遞信息封裝為通信消息,所述通信消息包括消息事務(wù)id以及消息發(fā)送和接受協(xié)議。

繼續(xù)以上述領(lǐng)券業(yè)務(wù)作為例來(lái)說(shuō)明:當(dāng)用戶激活領(lǐng)券業(yè)務(wù),領(lǐng)券系統(tǒng)通過(guò)審核,并沒(méi)有發(fā)現(xiàn)用戶有任何不合規(guī)之處,則代表用戶可以領(lǐng)用該優(yōu)惠券。則領(lǐng)券系統(tǒng)執(zhí)行發(fā)放優(yōu)惠券的步驟,此時(shí)判定業(yè)務(wù)操作成功。若用戶不符合領(lǐng)取優(yōu)惠券的要求,則拒絕向用戶發(fā)放優(yōu)惠券,此時(shí)判定業(yè)務(wù)操作失敗。在領(lǐng)券系統(tǒng)中,領(lǐng)券系統(tǒng)可以獨(dú)立的完成其功能,無(wú)需關(guān)心訂單系統(tǒng)是否能正確處理所接收到的優(yōu)惠券消息,從而領(lǐng)券系統(tǒng)功能較單一,結(jié)構(gòu)較簡(jiǎn)單地實(shí)現(xiàn)了其本身的領(lǐng)券功能。進(jìn)一步的,當(dāng)用戶獲得優(yōu)惠券時(shí),該優(yōu)惠券需要與訂單系統(tǒng)交流通訊,因此領(lǐng)券你系統(tǒng)需要生成一個(gè)傳遞信息,通知訂單系統(tǒng),該用戶具有優(yōu)惠券。

而該傳遞信息,通過(guò)通知與接收模塊封裝而成。具體的,該消息通知與接收模塊的作用主要是生成一個(gè)唯一的消息事務(wù)id,供全局的消息使用,以達(dá)到區(qū)分各個(gè)消息的目的;另外此模塊會(huì)按照具體消息隊(duì)列的接口語(yǔ)法,封裝好消息的發(fā)送和接受的方法,對(duì)外提供服務(wù)。此模塊可以作為所有系統(tǒng)之間調(diào)用消息的共用模塊。即該通知與接收模塊可以是本系統(tǒng)存在的,也可以是多個(gè)系統(tǒng)共享使用的。

步驟s103,將所述通信消息發(fā)送至與所述另一系統(tǒng)之間部署的消息隊(duì)列,用以通過(guò)所述消息隊(duì)列發(fā)送至所述另一系統(tǒng)。

消息隊(duì)列可以采用優(yōu)選采用灰兔消息隊(duì)列rabbitmq,rabbitmq是當(dāng)前流行的開(kāi)源消息隊(duì)列系統(tǒng),用erlang語(yǔ)言開(kāi)發(fā),因?yàn)閑rlang天生就是一門分布式語(yǔ)言,因此便于實(shí)現(xiàn)集群,以及分布式系統(tǒng)。rabbitmq是amqp(高級(jí)消息隊(duì)列協(xié)議)的標(biāo)準(zhǔn)實(shí)現(xiàn),可復(fù)用的企業(yè)消息系統(tǒng)。它遵循mozillapubliclicense開(kāi)源協(xié)議。相對(duì)于其他的消息隊(duì)列,rabbitmq具有開(kāi)源,穩(wěn)定性好,以及符合amqp標(biāo)準(zhǔn),因此為優(yōu)秀的消息隊(duì)列選擇。

本實(shí)施例所提供的服務(wù)異步交互方法,通過(guò)設(shè)置功能單一的系統(tǒng),本地執(zhí)行其業(yè)務(wù),并且將傳遞信息通過(guò)封裝并且通過(guò)消息隊(duì)列傳遞至目標(biāo)系統(tǒng),則是各自在本地進(jìn)行本地的業(yè)務(wù)邏輯操作,再將結(jié)果通過(guò)消息隊(duì)列的方式發(fā)送至另一系統(tǒng)。相對(duì)于通過(guò)http實(shí)現(xiàn)系統(tǒng)間的同步,本實(shí)施例實(shí)現(xiàn)了系統(tǒng)之間的異步交互,能夠增強(qiáng)系統(tǒng)的穩(wěn)定性;進(jìn)一步的,通過(guò)rabbitmq可以讓各個(gè)系統(tǒng)的服務(wù)業(yè)務(wù)之間解耦,無(wú)需復(fù)雜的http調(diào)用接口驗(yàn)證。

其中,異步雙方不需要共同的時(shí)鐘,也就是接收方不知道發(fā)送方什么時(shí)候發(fā)送,所以在發(fā)送的信息中就要有提示接收方開(kāi)始接收的信息,如開(kāi)始位,同時(shí)在結(jié)束時(shí)有停止位。

解耦就是用數(shù)學(xué)方法將兩種運(yùn)動(dòng)分離開(kāi)來(lái)處理問(wèn)題,常用解耦方法就是忽略或簡(jiǎn)化對(duì)所研究問(wèn)題影響較小的一種運(yùn)動(dòng),只分析主要的運(yùn)動(dòng)。從而使得系統(tǒng)的變量降低,使得系統(tǒng)更穩(wěn)定。在解耦控制問(wèn)題中,基本目標(biāo)是設(shè)計(jì)一個(gè)控制裝置,使構(gòu)成的多變量控制系統(tǒng)的每個(gè)輸出變量?jī)H由一個(gè)輸入變量完全控制,且不同的輸出由不同的輸入控制。

全局事務(wù):資源管理器管理和協(xié)調(diào)的事務(wù),可以跨越多個(gè)數(shù)據(jù)庫(kù)和進(jìn)程。

請(qǐng)參看圖2,本發(fā)明服務(wù)異步交互方法第二實(shí)施例,本實(shí)施例以第一實(shí)施例為基礎(chǔ),新增了步驟,具體如下:

步驟s201,本步驟與第一實(shí)施例的步驟s101相同,具體請(qǐng)參看上述實(shí)施例,在此不再贅述。

步驟s202,本步驟與第一實(shí)施例的步驟s102相同,具體請(qǐng)參看上述實(shí)施例,在此不再贅述。

步驟s203,本步驟與第一實(shí)施例的步驟s103相同,具體請(qǐng)參看上述實(shí)施例,在此不再贅述。

步驟s204,在預(yù)設(shè)消息記錄表中記錄所述業(yè)務(wù)操作的業(yè)務(wù)操作消息,其中,所述業(yè)務(wù)操作消息包括所述消息事務(wù)id和推送狀態(tài)。

步驟s205,在接收到來(lái)自所述另一系統(tǒng)針對(duì)所述通信消息返回的返回消息時(shí),根據(jù)所述返回消息更新所述業(yè)務(wù)操作消息的推送狀態(tài)。

本實(shí)施例,通過(guò)記錄業(yè)務(wù)操作消息至消息記錄表中,則可以實(shí)現(xiàn)對(duì)每一業(yè)務(wù)操作進(jìn)行追溯的效果。從而便于復(fù)查以及核對(duì)消息等后續(xù)工作。

請(qǐng)參看圖3,本發(fā)明服務(wù)異步交互方法第三實(shí)施例,本實(shí)施例以第二實(shí)施例為基礎(chǔ),新增了步驟,具體如下:

步驟s301,本步驟與第一實(shí)施例的步驟s201相同,具體請(qǐng)參看上述實(shí)施例,在此不再贅述。

步驟s302,本步驟與第一實(shí)施例的步驟s202相同,具體請(qǐng)參看上述實(shí)施例,在此不再贅述。

步驟s303,本步驟與第一實(shí)施例的步驟s203相同,具體請(qǐng)參看上述實(shí)施例,在此不再贅述。

步驟s304,本步驟與第一實(shí)施例的步驟s204相同,具體請(qǐng)參看上述實(shí)施例,在此不再贅述。

步驟s305,本步驟與第一實(shí)施例的步驟s205相同,具體請(qǐng)參看上述實(shí)施例,在此不再贅述。

步驟s306,定時(shí)輪詢所述消息記錄表,查詢推送狀態(tài)為失敗的通信消息。

定時(shí)的時(shí)間,可以是5秒,1分鐘或者10分鐘等等。

步驟s307,在查詢到推送狀態(tài)為失敗的通信消息時(shí),對(duì)所述推送狀態(tài)為失敗的通信消息進(jìn)行重新發(fā)送。

本實(shí)施例,通過(guò)定時(shí)輪詢所述消息記錄表,則可以了解發(fā)送失敗的消息,進(jìn)一步重發(fā)這些消息,從而建立了錯(cuò)誤補(bǔ)償機(jī)制。錯(cuò)誤補(bǔ)償機(jī)制能夠保證一些消息發(fā)送失敗,能夠進(jìn)行重新發(fā)送,確保消息抵達(dá)到其他系統(tǒng)的服務(wù)。

請(qǐng)參看圖4,本發(fā)明服務(wù)異步交互設(shè)備一實(shí)施例,所述服務(wù)異步交互設(shè)備1000包括處理器1100、存儲(chǔ)器1200和儲(chǔ)存于所述儲(chǔ)存器1200上的并可在處理器1100上運(yùn)行的服務(wù)異步交互程序1300;所述服務(wù)異步交互程序1300被所述處理器1100執(zhí)行時(shí)實(shí)現(xiàn)如上述任一實(shí)施例的服務(wù)異步交互方法的步驟。

所述服務(wù)異步交互方法被處理器1100執(zhí)行時(shí),所實(shí)現(xiàn)的步驟參看上述實(shí)施例,在此不再贅述。

由于本實(shí)施例所提供的服務(wù)異步交互設(shè)備1000,包括了上述服務(wù)異步交互方法的全部技術(shù)特征,因此也具有上述服務(wù)異步交互方法的全部有益效果,在此不再贅述。

請(qǐng)參看圖5,本發(fā)明可讀介質(zhì)一實(shí)施例,用于計(jì)算機(jī)讀取,所述可讀介質(zhì)2000上存儲(chǔ)有服務(wù)異步交互程序2100,所述服務(wù)異步交互程序2100被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上述任一實(shí)施例的服務(wù)異步交互方法的步驟。

所述服務(wù)異步交互方法被處理器執(zhí)行時(shí),所實(shí)現(xiàn)的步驟參看上述實(shí)施例,在此不再贅述。

由于本實(shí)施例所提供的可讀介質(zhì),包括了上述服務(wù)異步交互方法的全部技術(shù)特征,因此也具有上述服務(wù)異步交互方法的全部有益效果,在此不再贅述。

請(qǐng)參看圖6本發(fā)明服務(wù)異步交互系統(tǒng)一實(shí)施例,所述服務(wù)異步交互系統(tǒng)3000,包括處理器3100、存儲(chǔ)器3200和儲(chǔ)存于所述儲(chǔ)存器3200上的用以實(shí)現(xiàn)多種服務(wù)的多個(gè)系統(tǒng)。所述服務(wù)異步交互系統(tǒng)3000還包括儲(chǔ)存在所述儲(chǔ)存器3200上的用于部署在多個(gè)所述系統(tǒng)之間的消息隊(duì)列集群3500。其中,本實(shí)施例中,多個(gè)系統(tǒng)以其中的第一系統(tǒng)3300和第二系統(tǒng)3400為例來(lái)舉例說(shuō)明。處理器3100可以是一個(gè)也可以是多個(gè),儲(chǔ)存器3200也可以是一個(gè)或多個(gè),同樣整個(gè)服務(wù)異步交互系統(tǒng)可以設(shè)置在一臺(tái)服務(wù)器上,也可以設(shè)置在多臺(tái)服務(wù)器上,例如第一系統(tǒng)3300位于一臺(tái)服務(wù)器上,第二系統(tǒng)3400位于另一臺(tái)服務(wù)器上等等。

所述第一系統(tǒng)3300在被所述處理器3100執(zhí)行時(shí),實(shí)現(xiàn)如下步驟:

在接收到需要與第二系統(tǒng)3400進(jìn)行業(yè)務(wù)交互的業(yè)務(wù)指令時(shí),根據(jù)所述業(yè)務(wù)指令執(zhí)行相關(guān)業(yè)務(wù)操作。

例如,當(dāng)用戶在領(lǐng)券系統(tǒng)內(nèi)激活了領(lǐng)券業(yè)務(wù),則領(lǐng)券系統(tǒng)執(zhí)行該領(lǐng)券的業(yè)務(wù);而該領(lǐng)券的業(yè)務(wù)將用于訂單系統(tǒng),用于在訂單系統(tǒng)內(nèi)實(shí)施現(xiàn)金抵扣業(yè)務(wù)。則上述的領(lǐng)券業(yè)務(wù)需要與訂單系統(tǒng)進(jìn)行業(yè)務(wù)交互。當(dāng)領(lǐng)券系統(tǒng)接收到執(zhí)行領(lǐng)券業(yè)務(wù)指令時(shí),其在本地執(zhí)行該業(yè)務(wù)直至該業(yè)務(wù)結(jié)束,例如向用戶展現(xiàn)領(lǐng)券動(dòng)畫,以及領(lǐng)券金額,以及領(lǐng)券成功的提示等等。

在所述業(yè)務(wù)操作成功時(shí),調(diào)用消息通知與接收模塊,來(lái)將所述業(yè)務(wù)操作的傳遞信息封裝為通信消息,所述通信消息包括消息事務(wù)id以及消息發(fā)送和接受協(xié)議。

繼續(xù)以上述領(lǐng)券業(yè)務(wù)作為例來(lái)說(shuō)明:當(dāng)用戶激活領(lǐng)券業(yè)務(wù),領(lǐng)券系統(tǒng)通過(guò)審核,并沒(méi)有發(fā)現(xiàn)用戶有任何不合規(guī)之處,則代表用戶可以領(lǐng)用該優(yōu)惠券。則領(lǐng)券系統(tǒng)執(zhí)行發(fā)放優(yōu)惠券的步驟,此時(shí)判定業(yè)務(wù)操作成功。若用戶不符合領(lǐng)取優(yōu)惠券的要求,則拒絕向用戶發(fā)放優(yōu)惠券,此時(shí)判定業(yè)務(wù)操作失敗。在領(lǐng)券系統(tǒng)中,領(lǐng)券系統(tǒng)可以獨(dú)立的完成其功能,無(wú)需關(guān)心訂單系統(tǒng)是否能正確處理所接收到的優(yōu)惠券消息,從而領(lǐng)券系統(tǒng)功能較單一,結(jié)構(gòu)較簡(jiǎn)單地實(shí)現(xiàn)了其本身的領(lǐng)券功能。進(jìn)一步的,當(dāng)用戶獲得優(yōu)惠券時(shí),該優(yōu)惠券需要與訂單系統(tǒng)交流通訊,因此領(lǐng)券你系統(tǒng)需要生成一個(gè)傳遞信息,通知訂單系統(tǒng),該用戶具有優(yōu)惠券。

而該傳遞信息,通過(guò)通知與接收模塊封裝而成。具體的,該消息通知與接收模塊的作用主要是生成一個(gè)唯一的消息事務(wù)id,供全局的消息使用,以達(dá)到區(qū)分各個(gè)消息的目的;另外此模塊會(huì)按照具體消息隊(duì)列的接口語(yǔ)法,封裝好消息的發(fā)送和接受的方法,對(duì)外提供服務(wù)。此模塊可以作為所有系統(tǒng)之間調(diào)用消息的共用模塊。即該通知與接收模塊可以是本系統(tǒng)存在的,也可以是多個(gè)系統(tǒng)共享使用的。

將所述通信消息發(fā)送至與第二系統(tǒng)3400之間部署的消息隊(duì)列,用以通過(guò)所述消息隊(duì)列發(fā)送至第二系統(tǒng)3400。

本實(shí)施例中,第一系統(tǒng)3300既包括本身業(yè)務(wù)所需的業(yè)務(wù)代碼,還在業(yè)務(wù)代碼中集成了消息通知與接收模塊。同理,第二系統(tǒng)3400也既包括本身業(yè)務(wù)所需的業(yè)務(wù)代碼,還在業(yè)務(wù)代碼中集成了消息通知與接收模塊。

所述第一系統(tǒng)3300在被所述處理器執(zhí)行時(shí),還包括實(shí)現(xiàn)如下步驟:

接受來(lái)自第二系統(tǒng)3400的通信消息;

根據(jù)所述通信消息進(jìn)行處理,并且在處理完畢時(shí)將處理結(jié)果封裝為包括消息發(fā)送和接受協(xié)議的返回消息;

將所述返回消息發(fā)送至所述消息隊(duì)列,用以通過(guò)所述消息隊(duì)列發(fā)送至第二系統(tǒng)3400。

所述消息隊(duì)列集群在被所述處理器執(zhí)行時(shí),實(shí)現(xiàn)如下步驟:

在接收到所述第一系統(tǒng)3300的通信消息以及返回消息時(shí),通過(guò)每個(gè)系統(tǒng)之間業(yè)務(wù)交互所分別使用的一個(gè)指定消息隊(duì)列,來(lái)發(fā)送所述通信消息以及返回消息。

本實(shí)施例中,為了系統(tǒng)穩(wěn)定以及便于維護(hù),每個(gè)系統(tǒng)之間業(yè)務(wù)的交互需要分別使用一個(gè)消息隊(duì)列進(jìn)行消息通信,不可共用一個(gè)消息隊(duì)列。進(jìn)一步的,隊(duì)列的名字可以取得相對(duì)有意義,如商品系統(tǒng)和訂單系統(tǒng)交互的隊(duì)列可以叫shop_order_queue,從而達(dá)到后期容易維護(hù)的效果。

消息隊(duì)列可以采用優(yōu)選采用灰兔消息隊(duì)列rabbitmq,rabbitmq是當(dāng)前流行的開(kāi)源消息隊(duì)列系統(tǒng),用erlang語(yǔ)言開(kāi)發(fā),因?yàn)閑rlang天生就是一門分布式語(yǔ)言,因此便于實(shí)現(xiàn)集群,以及分布式系統(tǒng)。rabbitmq是amqp(高級(jí)消息隊(duì)列協(xié)議)的標(biāo)準(zhǔn)實(shí)現(xiàn),可復(fù)用的企業(yè)消息系統(tǒng)。它遵循mozillapubliclicense開(kāi)源協(xié)議。相對(duì)于其他的消息隊(duì)列,rabbitmq具有開(kāi)源,穩(wěn)定性好,以及符合amqp標(biāo)準(zhǔn),因此為優(yōu)秀的消息隊(duì)列選擇。

rabbit模式大概分為以下三種:?jiǎn)我荒J?、普通模式、鏡像模式。其中,普通模式和鏡像模式為集群模式。本實(shí)施例的rabbitmq集群則可以采用普通模式或鏡像模式。

普通模式:默認(rèn)的集群模式。

對(duì)于queue來(lái)說(shuō),消息實(shí)體只存在于其中一個(gè)節(jié)點(diǎn),a、b兩個(gè)節(jié)點(diǎn)僅有相同的元數(shù)據(jù),即隊(duì)列結(jié)構(gòu)。

當(dāng)消息進(jìn)入a節(jié)點(diǎn)的queue中后,consumer從b節(jié)點(diǎn)拉取時(shí),rabbitmq會(huì)臨時(shí)在a、b間進(jìn)行消息傳輸,把a(bǔ)中的消息實(shí)體取出并經(jīng)過(guò)b發(fā)送給consumer。優(yōu)選的consumer盡量連接每一個(gè)節(jié)點(diǎn),從中取消息。即對(duì)于同一個(gè)邏輯隊(duì)列,要在多個(gè)節(jié)點(diǎn)建立物理queue。否則無(wú)論consumer連a或b,出口總在a,會(huì)產(chǎn)生瓶頸。

但是,該模式存在一個(gè)問(wèn)題就是當(dāng)a節(jié)點(diǎn)故障后,b節(jié)點(diǎn)無(wú)法取到a節(jié)點(diǎn)中還未消費(fèi)的消息實(shí)體。因此,優(yōu)選的所述消息隊(duì)列集群在被所述處理器執(zhí)行時(shí),還包括實(shí)現(xiàn)消息隊(duì)列的持久化。在做了持久化后,則可以等a節(jié)點(diǎn)恢復(fù)后,再可被消費(fèi);從而保證數(shù)據(jù)的穩(wěn)定性。

其中,持久化可以包括:將交換機(jī)置為可持久,將通道置為可持久,以及消息發(fā)送時(shí)設(shè)置可持久。當(dāng)消息可持久化時(shí),若mq服務(wù)中斷,再次啟動(dòng)消費(fèi)者獲取消息,消息依然能夠恢復(fù)。

鏡像模式:把需要的隊(duì)列做成鏡像隊(duì)列,存在于多個(gè)節(jié)點(diǎn),屬于rabbitmq的ha方案。

該模式解決了上述普通模式存在的問(wèn)題,其實(shí)質(zhì)和普通模式不同之處在于,消息實(shí)體會(huì)主動(dòng)在鏡像節(jié)點(diǎn)間同步,而不是在consumer取數(shù)據(jù)時(shí)臨時(shí)拉取。

該模式由于需要較強(qiáng)的系統(tǒng)性能以及較寬裕的網(wǎng)絡(luò)帶寬條件。因此該模式在對(duì)可靠性要求較高的場(chǎng)合中適用。

本實(shí)施例服務(wù)異步交互系統(tǒng)的消息隊(duì)列,采用rabbitmq集群方案,能夠更高效和方便的實(shí)現(xiàn)多系統(tǒng)之間的分布式布局。

本實(shí)施例所提供的服務(wù)異步交互系統(tǒng),通過(guò)設(shè)置功能單一的系統(tǒng),本地執(zhí)行其業(yè)務(wù),并且將傳遞信息通過(guò)封裝并且通過(guò)消息隊(duì)列傳遞至目標(biāo)系統(tǒng),則是各自在本地進(jìn)行本地的業(yè)務(wù)邏輯操作,再將結(jié)果通過(guò)消息隊(duì)列的方式發(fā)送至另一系統(tǒng)。相對(duì)于通過(guò)http實(shí)現(xiàn)系統(tǒng)間的同步,本實(shí)施例實(shí)現(xiàn)了系統(tǒng)之間的異步交互,能夠增強(qiáng)系統(tǒng)的穩(wěn)定性;進(jìn)一步的,通過(guò)rabbitmq可以讓各個(gè)系統(tǒng)的服務(wù)業(yè)務(wù)之間解耦,無(wú)需復(fù)雜的http調(diào)用接口驗(yàn)證。

優(yōu)選的,所述第一系統(tǒng)3300在被所述處理器3100執(zhí)行時(shí),還實(shí)現(xiàn)如下步驟:

在所述業(yè)務(wù)操作成功時(shí),在預(yù)設(shè)消息記錄表中記錄所述業(yè)務(wù)操作的業(yè)務(wù)操作消息,其中,所述業(yè)務(wù)操作消息包括所述消息事務(wù)id和推送狀態(tài)。

在接收到來(lái)自第二系統(tǒng)3400針對(duì)所述通信消息返回的返回消息時(shí),根據(jù)所述返回消息更新所述業(yè)務(wù)操作消息的推送狀態(tài)。

本實(shí)施例,通過(guò)記錄業(yè)務(wù)操作消息至消息記錄表中,則可以實(shí)現(xiàn)對(duì)每一業(yè)務(wù)操作進(jìn)行追溯的效果。從而便于復(fù)查以及核對(duì)消息等后續(xù)工作。

優(yōu)選的,所述第一系統(tǒng)3300在被所述處理器3100執(zhí)行時(shí),還實(shí)現(xiàn)如下步驟:

定時(shí)輪詢所述消息記錄表,查詢推送狀態(tài)為失敗的通信消息;定時(shí)的時(shí)間,可以是5秒,1分鐘或者10分鐘等等。

在查詢到推送狀態(tài)為失敗的通信消息時(shí),對(duì)所述推送狀態(tài)為失敗的通信消息進(jìn)行重新發(fā)送。

本實(shí)施例,通過(guò)定時(shí)輪詢所述消息記錄表,則可以了解發(fā)送失敗的消息,進(jìn)一步重發(fā)這些消息,從而建立了錯(cuò)誤補(bǔ)償機(jī)制。錯(cuò)誤補(bǔ)償機(jī)制能夠保證一些消息發(fā)送失敗,能夠進(jìn)行重新發(fā)送,確保消息抵達(dá)到其他系統(tǒng)的服務(wù)。

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

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

通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端(可以是手機(jī),計(jì)算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。

上面結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行了描述,但是本發(fā)明并不局限于上述的具體實(shí)施方式,上述的具體實(shí)施方式僅僅是示意性的,而不是限制性的,本領(lǐng)域的普通技術(shù)人員在本發(fā)明的啟示下,在不脫離本發(fā)明宗旨和權(quán)利要求所保護(hù)的范圍情況下,還可做出很多形式,這些均屬于本發(fā)明的保護(hù)之內(nèi)。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
永和县| 南城县| 达孜县| 黄冈市| 卫辉市| 新竹市| 光泽县| 闵行区| 桑植县| 湘潭市| 平陆县| 葵青区| 同江市| 涿州市| 绍兴市| 余姚市| 平舆县| 资中县| 通江县| 姚安县| 界首市| 外汇| 北宁市| 中牟县| 广东省| 宁晋县| 志丹县| 绥宁县| 洛南县| 泌阳县| 东兴市| 平阳县| 安徽省| 大连市| 蓬溪县| 交城县| 土默特左旗| 恩施市| 沐川县| 安陆市| 高青县|