本發(fā)明涉及通信領(lǐng)域,特別涉及一種服務(wù)發(fā)現(xiàn)的處理方法及裝置。
背景技術(shù):
分布式服務(wù)系統(tǒng)就是將服務(wù)系統(tǒng)的功能拆分,將各個(gè)功能放在幾臺(tái)獨(dú)立的計(jì)算機(jī)上,通過(guò)這幾臺(tái)計(jì)算機(jī)之間的相互協(xié)作,來(lái)完成整個(gè)系統(tǒng)的功能。在這里,拆分的功能模塊通常指的就是服務(wù)。
采用分布式系統(tǒng),最大的優(yōu)點(diǎn)表現(xiàn)在系統(tǒng)的處理速度上。分布式服務(wù)系統(tǒng)另外的優(yōu)點(diǎn)還在于功能模塊分開(kāi),便于管理、維護(hù)和更新。然而,隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站應(yīng)用規(guī)模的不斷擴(kuò)大,業(yè)務(wù)量和業(yè)務(wù)類型日趨復(fù)雜多樣,同一個(gè)業(yè)務(wù)類型的服務(wù)可能由多個(gè)服務(wù)提供端提供。同時(shí),業(yè)務(wù)之間服務(wù)的查找發(fā)現(xiàn)調(diào)用也日趨頻繁,提供一種高效穩(wěn)定的服務(wù)發(fā)現(xiàn)機(jī)制在大型的服務(wù)系統(tǒng)中也就顯得相當(dāng)重要了。
為了能找到滿足用戶需求的服務(wù),現(xiàn)有的服務(wù)發(fā)現(xiàn)機(jī)制包括以下幾個(gè)部分:
服務(wù)注冊(cè)中心:主要負(fù)責(zé)服務(wù)的管理和監(jiān)控服務(wù)的狀態(tài)。
服務(wù)提供端:主要負(fù)責(zé)通過(guò)服務(wù)端代理模塊向服務(wù)注冊(cè)中心注冊(cè)服務(wù)和發(fā)布服務(wù)。
服務(wù)消費(fèi)端:主要負(fù)責(zé)通過(guò)消費(fèi)端代理模塊向服務(wù)注冊(cè)中心查找所需要的服務(wù)。
首先服務(wù)提供端向服務(wù)注冊(cè)中心注冊(cè)自己提供的服務(wù)信息,然后服務(wù)消費(fèi)端向服務(wù)注冊(cè)中心查詢服務(wù)的信息列表,接著服務(wù)注冊(cè)中心返回服務(wù)提供者地址列表給服務(wù)消費(fèi)端,最后服務(wù)消費(fèi)端從返回的服務(wù)提供端地址列表中,選擇其中一臺(tái)服務(wù)提供端,并與其建立鏈接進(jìn)行服務(wù)調(diào)用。
上述服務(wù)發(fā)現(xiàn)實(shí)現(xiàn)方案中,在某些應(yīng)用場(chǎng)景下可能存在以下問(wèn)題:
服務(wù)消費(fèi)端獲取服務(wù)發(fā)生調(diào)用后,如果該服務(wù)在服務(wù)注冊(cè)中心的服務(wù)信息 及狀態(tài)有更新,只有再次獲取服務(wù),服務(wù)消費(fèi)端才能得到最新的服務(wù)提供者信息列表,否則服務(wù)提供者地址列表會(huì)存在更新不及時(shí)的情況。比如,某個(gè)服務(wù)在服務(wù)注冊(cè)中心的狀態(tài)已不可用,如果服務(wù)消費(fèi)端沒(méi)有更新本地緩存中的服務(wù)提供者地址列表,調(diào)用的仍可能是原來(lái)的服務(wù),這時(shí)就會(huì)造成服務(wù)調(diào)用失敗。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題是提供一種服務(wù)發(fā)現(xiàn)的處理方法及裝置,解決現(xiàn)有服務(wù)發(fā)現(xiàn)機(jī)制存在的服務(wù)提供者地址列表更新不及時(shí)的問(wèn)題。
為解決上述技術(shù)問(wèn)題,本發(fā)明的實(shí)施例提供一種服務(wù)發(fā)現(xiàn)的處理方法,包括:
按照預(yù)設(shè)時(shí)間間隔,定時(shí)獲取已查詢的第一服務(wù)名信息;
根據(jù)所述第一服務(wù)名信息向服務(wù)注冊(cè)中心發(fā)送第一服務(wù)查詢請(qǐng)求,并接收所述服務(wù)注冊(cè)中心根據(jù)所述第一服務(wù)查詢請(qǐng)求返回的,與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。
其中,所述本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息包括:預(yù)先存儲(chǔ)在本地緩存中的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
所述處理方法還包括:將所述本地緩存中存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息備份到本地內(nèi)存文件中;
所述根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新的步驟包括:
根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)所述本地緩存以及所述本地內(nèi)存文件中存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。
其中,所述處理方法還包括:
接收服務(wù)調(diào)用請(qǐng)求后,根據(jù)所述服務(wù)調(diào)用請(qǐng)求包含的第二服務(wù)名信息,在本地查詢與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
若在本地查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則從本地獲取與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
若在本地中沒(méi)有查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則根據(jù)所述第二服務(wù)名信息,向所述服務(wù)注冊(cè)中心發(fā)送第二服務(wù)查詢請(qǐng)求,接收所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息返回給用戶。
其中,所述若在本地中沒(méi)有查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則根據(jù)所述第二服務(wù)名信息,向所述服務(wù)注冊(cè)中心發(fā)送第二服務(wù)查詢請(qǐng)求之后,所述處理方法還包括:
判斷所述服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,得到第一判斷結(jié)果;
若所述第一判斷結(jié)果為是,則使所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求以及預(yù)設(shè)負(fù)載均衡策略,獲取與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息并返回;
若所述第一判斷結(jié)果為否,則使所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求,獲取與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表并返回,其中所述服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息。
其中,所述從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息包括:與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息或者與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表,其中所述服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息;
所述將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息返回給用戶的步驟包括:
判斷所述服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,得到第二判斷結(jié)果;
若所述第二判斷結(jié)果為是,則將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息返回給用戶;
若所述第二判斷結(jié)果為否,則根據(jù)預(yù)設(shè)負(fù)載均衡策略,在從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表中獲取一個(gè)服務(wù)提供者信息并返回給用戶。
為解決上述技術(shù)問(wèn)題,本發(fā)明的實(shí)施例還提供一種服務(wù)發(fā)現(xiàn)的處理裝置,包括:
第一獲取模塊,用于按照預(yù)設(shè)時(shí)間間隔,定時(shí)獲取已查詢的第一服務(wù)名信息;
第一接收模塊,用于根據(jù)所述第一服務(wù)名信息向服務(wù)注冊(cè)中心發(fā)送第一服務(wù)查詢請(qǐng)求,并接收所述服務(wù)注冊(cè)中心根據(jù)所述第一服務(wù)查詢請(qǐng)求返回的,與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
更新模塊,用于根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。
其中,所述本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息包括:預(yù)先存儲(chǔ)在本地緩存中的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
所述處理裝置還包括:
備份模塊,用于將所述本地緩存中存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息備份到本地內(nèi)存文件中;
所述更新模塊包括:
更新單元,用于根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)所述本地緩存以及所述本地內(nèi)存文件中存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。
其中,所述處理裝置還包括:
查詢模塊,用于接收服務(wù)調(diào)用請(qǐng)求后,根據(jù)所述服務(wù)調(diào)用請(qǐng)求包含的第二服務(wù)名信息,在本地查詢與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
第二獲取模塊,用于若在本地查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則從本地獲取與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
第二接收模塊,用于若在本地中沒(méi)有查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則根據(jù)所述第二服務(wù)名信息,向所述服務(wù)注冊(cè)中心發(fā)送第二服務(wù)查詢請(qǐng)求,接收所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求返回的,與 所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
返回模塊,用于將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息返回給用戶。
其中,所述處理裝置還包括:
判斷模塊,用于判斷所述服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,得到第一判斷結(jié)果;
第一執(zhí)行模塊,用于若所述第一判斷結(jié)果為是,則使所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求以及預(yù)設(shè)負(fù)載均衡策略,獲取與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息并返回;
第二執(zhí)行模塊,用于若所述第一判斷結(jié)果為否,則使所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求,獲取與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表并返回,其中所述服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息。
其中,所述從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息包括:與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息或者與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表,其中所述服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息;
所述返回模塊包括:
判斷單元,用于判斷所述服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,得到第二判斷結(jié)果;
第一返回單元,用于若所述第二判斷結(jié)果為是,則將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息返回給用戶;
第二返回單元,用于若所述第二判斷結(jié)果為否,則根據(jù)預(yù)設(shè)負(fù)載均衡策略,在從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表中獲取一個(gè)服務(wù)提供者信息并返回給用戶。
本發(fā)明的上述技術(shù)方案的有益效果如下:
本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,首先按照預(yù)設(shè)時(shí)間間隔,定時(shí)獲取已查詢的第一服務(wù)名信息;然后根據(jù)第一服務(wù)名信息向服務(wù)注冊(cè)中心發(fā)送第一服務(wù)查詢請(qǐng)求,并接收服務(wù)注冊(cè)中心根據(jù)第一服務(wù)查詢請(qǐng)求返回的,與第一服 務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;最后根據(jù)服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)本地存儲(chǔ)的與第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。這樣,當(dāng)服務(wù)注冊(cè)中心的服務(wù)提供者信息有更新時(shí),通過(guò)本發(fā)明的方法能及時(shí)將更新后的服務(wù)提供者信息同步到本地,解決了現(xiàn)有服務(wù)發(fā)現(xiàn)機(jī)制存在的服務(wù)提供者地址列表更新不及時(shí)的問(wèn)題,避免了由于更新不及時(shí)造成的服務(wù)調(diào)用失敗,增強(qiáng)了服務(wù)發(fā)現(xiàn)的有效性。
附圖說(shuō)明
圖1為本發(fā)明服務(wù)發(fā)現(xiàn)的處理方法流程圖;
圖2為本發(fā)明服務(wù)發(fā)現(xiàn)的處理方法一具體實(shí)現(xiàn)流程圖;
圖3為本發(fā)明服務(wù)發(fā)現(xiàn)的處理方法另一具體實(shí)現(xiàn)流程圖;
圖4為本發(fā)明服務(wù)發(fā)現(xiàn)的處理裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明要解決的技術(shù)問(wèn)題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述。
如圖1所示,本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,包括:
步驟101,按照預(yù)設(shè)時(shí)間間隔,定時(shí)獲取已查詢的第一服務(wù)名信息;
步驟102,根據(jù)所述第一服務(wù)名信息向服務(wù)注冊(cè)中心發(fā)送第一服務(wù)查詢請(qǐng)求,并接收所述服務(wù)注冊(cè)中心根據(jù)所述第一服務(wù)查詢請(qǐng)求返回的,與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
步驟103,根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。
本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,應(yīng)用于服務(wù)消費(fèi)端,在服務(wù)注冊(cè)中心的服務(wù)提供者信息有更新時(shí),能及時(shí)將更新后的服務(wù)提供者信息同步到服務(wù)消費(fèi)端本地,解決了現(xiàn)有服務(wù)發(fā)現(xiàn)機(jī)制存在的服務(wù)提供者地址列表更新不及時(shí)的問(wèn)題,避免了由于更新不及時(shí)造成的服務(wù)調(diào)用失敗,增強(qiáng)了服務(wù)發(fā)現(xiàn)的有效性。
其中,已查詢的服務(wù)名信息指向服務(wù)注冊(cè)中心查詢服務(wù)后保存在本地的服 務(wù)名信息。
其中,查詢過(guò)的服務(wù)提供者信息一般僅存儲(chǔ)在本地緩存中,服務(wù)提供者信息可包括描述服務(wù)功能的服務(wù)名、服務(wù)提供者的ip地址、端口、服務(wù)路徑、屬性等。
由于服務(wù)提供者信息僅存儲(chǔ)在本地緩存中,因此服務(wù)消費(fèi)端重啟后再次查詢服務(wù)并調(diào)用服務(wù)時(shí),如果服務(wù)注冊(cè)中心已發(fā)生異常或者不可用,比如宕機(jī),則服務(wù)消費(fèi)端將查詢不到服務(wù),從而導(dǎo)致服務(wù)調(diào)用不成功。為避免這種問(wèn)題,優(yōu)選的,所述本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息包括:預(yù)先存儲(chǔ)在本地緩存中的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
所述處理方法還可以包括:
步驟104,將所述本地緩存中存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息備份到本地內(nèi)存文件中。
這里,當(dāng)服務(wù)注冊(cè)中心發(fā)生異?;蛘卟豢捎脮r(shí),服務(wù)消費(fèi)端重啟后再次調(diào)用服務(wù)時(shí),可以根據(jù)服務(wù)名從本地內(nèi)存文件中獲取服務(wù)提供者信息并加載到本地緩存,保證了服務(wù)調(diào)用的順利進(jìn)行。
此時(shí),通過(guò)將查詢到的服務(wù)提供者信息備份到本地內(nèi)存文件中,解決了服務(wù)注冊(cè)中心異常導(dǎo)致服務(wù)再次調(diào)用失敗的問(wèn)題,增加了服務(wù)發(fā)現(xiàn)的穩(wěn)定性。
進(jìn)一步的,上述步驟103的步驟可以包括:
步驟1031,根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)所述本地緩存以及所述本地內(nèi)存文件中存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。
此時(shí),通過(guò)對(duì)本地緩存以及本地內(nèi)存文件中的服務(wù)提供者信息及時(shí)進(jìn)行更新,避免了由于更新不及時(shí)造成的服務(wù)調(diào)用失敗,增強(qiáng)了服務(wù)發(fā)現(xiàn)的有效性。
基于上述內(nèi)容,下面對(duì)本發(fā)明實(shí)施例的一具體實(shí)現(xiàn)流程舉例說(shuō)明如下:
如圖2所示,本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,包括:
步驟201,啟動(dòng)定時(shí)更新任務(wù)。
步驟202,按照預(yù)設(shè)時(shí)間間隔,定時(shí)獲取已查詢的第一服務(wù)名信息。
步驟203,根據(jù)第一服務(wù)名信息向服務(wù)注冊(cè)中心發(fā)送第一服務(wù)查詢請(qǐng)求。
步驟204,接收服務(wù)注冊(cè)中心根據(jù)第一服務(wù)查詢請(qǐng)求返回的,與第一服務(wù) 名信息對(duì)應(yīng)的服務(wù)提供者信息。
步驟205,將服務(wù)注冊(cè)中心返回的服務(wù)提供者信息與本地緩存中存儲(chǔ)的服務(wù)提供者信息進(jìn)行對(duì)比,判斷服務(wù)提供者信息是否有更新,如果有更新則跳轉(zhuǎn)至步驟206,否則跳轉(zhuǎn)至步驟207。
步驟206,對(duì)本地緩存以及本地內(nèi)存文件中的服務(wù)提供者信息進(jìn)行更新。
步驟207,判斷定時(shí)更新任務(wù)進(jìn)程是否結(jié)束,如果是則跳轉(zhuǎn)至步驟208,否則,跳轉(zhuǎn)至步驟202。
步驟208,結(jié)束。
通過(guò)上述流程可以看出,本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,在服務(wù)注冊(cè)中心的服務(wù)提供者信息有更新時(shí),能及時(shí)將更新后的服務(wù)提供者信息同步到服務(wù)消費(fèi)端本地,避免了由于更新不及時(shí)造成的服務(wù)調(diào)用失敗,增強(qiáng)了服務(wù)發(fā)現(xiàn)的有效性。且通過(guò)將查詢到的服務(wù)提供者信息備份到本地內(nèi)存文件中,解決了服務(wù)注冊(cè)中心異常導(dǎo)致服務(wù)再次調(diào)用失敗的問(wèn)題,增加了服務(wù)發(fā)現(xiàn)的穩(wěn)定性。
優(yōu)選的,所述處理方法還可以包括:
步驟105,接收服務(wù)調(diào)用請(qǐng)求后,根據(jù)所述服務(wù)調(diào)用請(qǐng)求包含的第二服務(wù)名信息,在本地查詢與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息。
這里,可在本地內(nèi)存文件中查詢與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息。
其中,對(duì)于首次調(diào)用的服務(wù),一般不會(huì)在本地內(nèi)存文件中查詢到對(duì)應(yīng)的服務(wù)名信息。而對(duì)于再次調(diào)用的服務(wù),由于之前已經(jīng)保存并備份,一般可以在本地內(nèi)存文件中查詢到對(duì)應(yīng)的服務(wù)名信息。
步驟106,若在本地查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則從本地獲取與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息。
這里,若本地內(nèi)存文件中查詢到與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則可將本地內(nèi)存文件中的服務(wù)提供者信息加載到本地緩存中,然后直接從本地緩存中取出并通過(guò)后續(xù)步驟返回給用戶。
其中,本地內(nèi)存文件中存儲(chǔ)的服務(wù)提供者信息為經(jīng)上述步驟101-103更新后的信息。
步驟107,若在本地中沒(méi)有查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則根據(jù)所述第二服務(wù)名信息,向所述服務(wù)注冊(cè)中心發(fā)送第二服務(wù)查詢 請(qǐng)求,接收所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息。
這里,若在本地內(nèi)存文件沒(méi)有查詢到與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則需要向服務(wù)注冊(cè)中心查詢獲取。
其中,接收到服務(wù)注冊(cè)中心返回的服務(wù)提供者信息之后,可將接收的服務(wù)提供者信息保存到本地緩存中,并在本地內(nèi)存文件中進(jìn)行備份,以供后續(xù)使用。
步驟108,將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息返回給用戶。
這里,通過(guò)將獲取到的與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息返回給用戶,方便了用戶對(duì)服務(wù)的調(diào)用。
此時(shí),通過(guò)在本地以及服務(wù)注冊(cè)中心兩側(cè)查詢,增強(qiáng)了服務(wù)調(diào)用的有效性。
其中,同一個(gè)業(yè)務(wù)類型的服務(wù)可能由多個(gè)服務(wù)提供者提供,因此,服務(wù)消費(fèi)端調(diào)用一次服務(wù)可能查詢到多個(gè)服務(wù)提供者信息。為了保證各服務(wù)提供者之間的平衡,一般服務(wù)消費(fèi)端可基于負(fù)載均衡原理選擇一個(gè)服務(wù)提供者。
但若服務(wù)調(diào)用的是基于長(zhǎng)鏈接的服務(wù)應(yīng)用場(chǎng)景,且此時(shí)服務(wù)的負(fù)載均衡由服務(wù)消費(fèi)端側(cè)來(lái)執(zhí)行,這種情況一方面增加了服務(wù)注冊(cè)中心的傳輸負(fù)載,另一方面會(huì)大大降低服務(wù)調(diào)用的執(zhí)行效率。
為避免上述問(wèn)題,優(yōu)選的,上述步驟107中,所述若在本地中沒(méi)有查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則根據(jù)所述第二服務(wù)名信息,向所述服務(wù)注冊(cè)中心發(fā)送第二服務(wù)查詢請(qǐng)求之后,所述處理方法還可以包括:
步驟109,判斷所述服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,得到第一判斷結(jié)果。
步驟1010,若所述第一判斷結(jié)果為是,則使所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求以及預(yù)設(shè)負(fù)載均衡策略,獲取與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息并返回。
這里,對(duì)于長(zhǎng)鏈接服務(wù),可通過(guò)服務(wù)注冊(cè)中心執(zhí)行服務(wù)的負(fù)載均衡,使服務(wù)注冊(cè)中心在多個(gè)服務(wù)提供者中選擇一個(gè)負(fù)載合適的服務(wù)提供者并返回給服務(wù)消費(fèi)端,減少了服務(wù)注冊(cè)中心的傳輸負(fù)載,并提高了服務(wù)調(diào)用的執(zhí)行效率。
步驟1011,若所述第一判斷結(jié)果為否,則使所述服務(wù)注冊(cè)中心根據(jù)所述 第二服務(wù)查詢請(qǐng)求,獲取與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表并返回,其中所述服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息。
這里,對(duì)于短鏈接服務(wù),可繼續(xù)通過(guò)服務(wù)消費(fèi)端執(zhí)行服務(wù)的負(fù)載均衡,使服務(wù)注冊(cè)中心將查詢到的多個(gè)服務(wù)提供者信息返回給服務(wù)消費(fèi)端,并通過(guò)服務(wù)消費(fèi)端在多個(gè)服務(wù)提供者中選擇一個(gè)負(fù)載合適的服務(wù)提供者。
此時(shí),根據(jù)服務(wù)是否屬于長(zhǎng)鏈接服務(wù)來(lái)決定服務(wù)的負(fù)載均衡是否由服務(wù)注冊(cè)中心側(cè)來(lái)執(zhí)行,解決了調(diào)用服務(wù)是基于長(zhǎng)鏈接的服務(wù)時(shí)應(yīng)用服務(wù)注冊(cè)中心傳輸負(fù)載開(kāi)銷過(guò)大和服務(wù)調(diào)用效率低下的問(wèn)題,增加了服務(wù)發(fā)現(xiàn)處理的靈活性和有效性。
進(jìn)一步的,所述從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息包括:與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息或者與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表,其中所述服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息。
這里,對(duì)于再次調(diào)用的服務(wù),即從本地獲取到與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息的情況,可在首次調(diào)用該服務(wù)時(shí),通過(guò)上述步驟109-1011,對(duì)于長(zhǎng)鏈接服務(wù),使服務(wù)注冊(cè)中心經(jīng)過(guò)負(fù)載均衡返回一個(gè)負(fù)載合適的服務(wù)提供者信息;對(duì)于短鏈接服務(wù),使服務(wù)注冊(cè)中心返回包括多個(gè)服務(wù)提供者信息的服務(wù)提供者信息列表。
上述步驟108的步驟可以包括:
步驟1081,判斷所述服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,得到第二判斷結(jié)果。
步驟1082,若所述第二判斷結(jié)果為是,則將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息返回給用戶。
這里,對(duì)于長(zhǎng)鏈接服務(wù),由于已經(jīng)在服務(wù)注冊(cè)中心進(jìn)行了負(fù)載均衡,因此直接將與第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息返回給用戶即可。
步驟1083,若所述第二判斷結(jié)果為否,則根據(jù)預(yù)設(shè)負(fù)載均衡策略,在從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表中獲取一個(gè)服務(wù)提供者信息并返回給用戶。
這里,對(duì)于短鏈接服務(wù),需要在服務(wù)消費(fèi)端進(jìn)行負(fù)載均衡后選擇一個(gè)負(fù)載合適的服務(wù)提供者返回給用戶。
此時(shí),通過(guò)將長(zhǎng)鏈接服務(wù)的負(fù)載均衡放在服務(wù)注冊(cè)中心側(cè)執(zhí)行,減少了服務(wù)注冊(cè)中心的傳輸負(fù)載,并提高了服務(wù)調(diào)用的執(zhí)行效率。
基于上述內(nèi)容,下面對(duì)本發(fā)明實(shí)施例的另一具體實(shí)現(xiàn)流程舉例說(shuō)明如下:
如圖3所示,本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,包括:
步驟301,根據(jù)服務(wù)調(diào)用請(qǐng)求,啟動(dòng)服務(wù)查詢?nèi)蝿?wù)。
步驟302,判斷與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息在本地內(nèi)存文件中是否存在,如果存在則跳轉(zhuǎn)至步驟303,否則,跳轉(zhuǎn)至步驟304。
這里,對(duì)于再次調(diào)用的服務(wù),本地內(nèi)存文件中存儲(chǔ)有經(jīng)過(guò)更新的服務(wù)提供者信息。
步驟303,從本地內(nèi)存文件獲取與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息并放到緩存,之后跳轉(zhuǎn)至步驟309。
步驟304,根據(jù)第二服務(wù)名信息,向服務(wù)注冊(cè)中心發(fā)送第二服務(wù)查詢請(qǐng)求。
步驟305,判斷服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,如果是則跳轉(zhuǎn)至步驟306,否則,跳轉(zhuǎn)至步驟307。
步驟306,使服務(wù)注冊(cè)中心根據(jù)第二服務(wù)查詢請(qǐng)求以及預(yù)設(shè)負(fù)載均衡策略,獲取與第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息并返回,之后跳轉(zhuǎn)至步驟308。
步驟307,使服務(wù)注冊(cè)中心根據(jù)第二服務(wù)查詢請(qǐng)求,獲取與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表并返回。其中服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息。
步驟308,接收服務(wù)注冊(cè)中心返回的一個(gè)服務(wù)提供者信息或者服務(wù)提供者信息列表,將接收到的信息保存到本地緩存,并在本地內(nèi)存文件中進(jìn)行備份。
步驟309,判斷服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,如果是則跳轉(zhuǎn)至步驟3010,否則,跳轉(zhuǎn)至步驟3011。
步驟3010,將從本地獲取的或者服務(wù)注冊(cè)中心返回的,與第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息返回給用戶。
步驟3011,根據(jù)預(yù)設(shè)負(fù)載均衡策略,在從本地獲取的或者服務(wù)注冊(cè)中心 返回的,與第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表中獲取一個(gè)服務(wù)提供者信息并返回給用戶。
通過(guò)上述流程可以看出,本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,根據(jù)服務(wù)是否屬于長(zhǎng)鏈接服務(wù)來(lái)決定服務(wù)的負(fù)載均衡是否由服務(wù)注冊(cè)中心側(cè)來(lái)執(zhí)行,解決了調(diào)用服務(wù)是基于長(zhǎng)鏈接的服務(wù)時(shí)應(yīng)用服務(wù)注冊(cè)中心傳輸負(fù)載開(kāi)銷過(guò)大和服務(wù)調(diào)用效率低下的問(wèn)題,增加了服務(wù)發(fā)現(xiàn)處理的靈活性和有效性。
本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,應(yīng)用于包括服務(wù)提供端、服務(wù)注冊(cè)中心和服務(wù)消費(fèi)端的分布式系統(tǒng),具體應(yīng)用于服務(wù)消費(fèi)端。其中,服務(wù)提供端將要發(fā)布的服務(wù)注冊(cè)到服務(wù)注冊(cè)中心,服務(wù)注冊(cè)中心用于接受服務(wù)消費(fèi)端的查找服務(wù)請(qǐng)求,當(dāng)發(fā)現(xiàn)存在相應(yīng)服務(wù)時(shí),實(shí)時(shí)返回最新的服務(wù)提供者信息給服務(wù)消費(fèi)端,服務(wù)消費(fèi)端用于向服務(wù)注冊(cè)中心發(fā)送查詢服務(wù)請(qǐng)求,接收從服務(wù)注冊(cè)中心返回的服務(wù),自動(dòng)與服務(wù)提供端建立鏈接,并調(diào)用相應(yīng)的服務(wù)。
本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,在服務(wù)注冊(cè)中心的服務(wù)提供者信息有更新時(shí),能及時(shí)將更新后的服務(wù)提供者信息同步到服務(wù)消費(fèi)端本地,避免了由于更新不及時(shí)造成的服務(wù)調(diào)用失敗,增強(qiáng)了服務(wù)發(fā)現(xiàn)的有效性。且通過(guò)將查詢到的服務(wù)提供者信息備份到本地內(nèi)存文件中,解決了服務(wù)注冊(cè)中心異常導(dǎo)致服務(wù)再次調(diào)用失敗的問(wèn)題,增加了服務(wù)發(fā)現(xiàn)的穩(wěn)定性。且根據(jù)服務(wù)是否屬于長(zhǎng)鏈接服務(wù)來(lái)決定服務(wù)的負(fù)載均衡是否由服務(wù)注冊(cè)中心側(cè)來(lái)執(zhí)行,解決了調(diào)用服務(wù)是基于長(zhǎng)鏈接的服務(wù)時(shí)應(yīng)用服務(wù)注冊(cè)中心傳輸負(fù)載開(kāi)銷過(guò)大和服務(wù)調(diào)用效率低下的問(wèn)題,增加了服務(wù)發(fā)現(xiàn)處理的靈活性和有效性。
如圖4所示,本發(fā)明的實(shí)施例還提供一種服務(wù)發(fā)現(xiàn)的處理裝置,包括:
第一獲取模塊,用于按照預(yù)設(shè)時(shí)間間隔,定時(shí)獲取已查詢的第一服務(wù)名信息;
第一接收模塊,用于根據(jù)所述第一服務(wù)名信息向服務(wù)注冊(cè)中心發(fā)送第一服務(wù)查詢請(qǐng)求,并接收所述服務(wù)注冊(cè)中心根據(jù)所述第一服務(wù)查詢請(qǐng)求返回的,與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
更新模塊,用于根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。
本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理裝置,應(yīng)用于服務(wù)消費(fèi)端,在服務(wù)注冊(cè)中 心的服務(wù)提供者信息有更新時(shí),能及時(shí)將更新后的服務(wù)提供者信息同步到服務(wù)消費(fèi)端本地,解決了現(xiàn)有服務(wù)發(fā)現(xiàn)機(jī)制存在的服務(wù)提供者地址列表更新不及時(shí)的問(wèn)題,避免了由于更新不及時(shí)造成的服務(wù)調(diào)用失敗,增強(qiáng)了服務(wù)發(fā)現(xiàn)的有效性。
優(yōu)選的,所述本地存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息包括:預(yù)先存儲(chǔ)在本地緩存中的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
所述處理裝置還可以包括:
備份模塊,用于將所述本地緩存中存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息備份到本地內(nèi)存文件中;
所述更新模塊可以包括:
更新單元,用于根據(jù)所述服務(wù)注冊(cè)中心返回的服務(wù)提供者信息,對(duì)所述本地緩存以及所述本地內(nèi)存文件中存儲(chǔ)的與所述第一服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息進(jìn)行更新。
優(yōu)選的,所述處理裝置還可以包括:
查詢模塊,用于接收服務(wù)調(diào)用請(qǐng)求后,根據(jù)所述服務(wù)調(diào)用請(qǐng)求包含的第二服務(wù)名信息,在本地查詢與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
第二獲取模塊,用于若在本地查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則從本地獲取與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
第二接收模塊,用于若在本地中沒(méi)有查詢到與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息,則根據(jù)所述第二服務(wù)名信息,向所述服務(wù)注冊(cè)中心發(fā)送第二服務(wù)查詢請(qǐng)求,接收所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息;
返回模塊,用于將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息返回給用戶。
優(yōu)選的,所述處理裝置還可以包括:
判斷模塊,用于判斷所述服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,得到第一判斷結(jié)果;
第一執(zhí)行模塊,用于若所述第一判斷結(jié)果為是,則使所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求以及預(yù)設(shè)負(fù)載均衡策略,獲取與所述第二服務(wù)名信息 對(duì)應(yīng)的一個(gè)服務(wù)提供者信息并返回;
第二執(zhí)行模塊,用于若所述第一判斷結(jié)果為否,則使所述服務(wù)注冊(cè)中心根據(jù)所述第二服務(wù)查詢請(qǐng)求,獲取與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表并返回,其中所述服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息。
優(yōu)選的,所述從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息包括:與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息或者與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表,其中所述服務(wù)提供者信息列表包括多個(gè)服務(wù)提供者信息;
所述返回模塊可以包括:
判斷單元,用于判斷所述服務(wù)調(diào)用請(qǐng)求所調(diào)用的服務(wù)鏈接類型是否為長(zhǎng)鏈接,得到第二判斷結(jié)果;
第一返回單元,用于若所述第二判斷結(jié)果為是,則將從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的一個(gè)服務(wù)提供者信息返回給用戶;
第二返回單元,用于若所述第二判斷結(jié)果為否,則根據(jù)預(yù)設(shè)負(fù)載均衡策略,在從本地獲取的或者所述服務(wù)注冊(cè)中心返回的,與所述第二服務(wù)名信息對(duì)應(yīng)的服務(wù)提供者信息列表中獲取一個(gè)服務(wù)提供者信息并返回給用戶。
本發(fā)明實(shí)施例的服務(wù)發(fā)現(xiàn)的處理方法,在服務(wù)注冊(cè)中心的服務(wù)提供者信息有更新時(shí),能及時(shí)將更新后的服務(wù)提供者信息同步到服務(wù)消費(fèi)端本地,避免了由于更新不及時(shí)造成的服務(wù)調(diào)用失敗,增強(qiáng)了服務(wù)發(fā)現(xiàn)的有效性。且通過(guò)將查詢到的服務(wù)提供者信息備份到本地內(nèi)存文件中,解決了服務(wù)注冊(cè)中心異常導(dǎo)致服務(wù)再次調(diào)用失敗的問(wèn)題,增加了服務(wù)發(fā)現(xiàn)的穩(wěn)定性。且根據(jù)服務(wù)是否屬于長(zhǎng)鏈接服務(wù)來(lái)決定服務(wù)的負(fù)載均衡是否由服務(wù)注冊(cè)中心側(cè)來(lái)執(zhí)行,解決了調(diào)用服務(wù)是基于長(zhǎng)鏈接的服務(wù)時(shí)應(yīng)用服務(wù)注冊(cè)中心傳輸負(fù)載開(kāi)銷過(guò)大和服務(wù)調(diào)用效率低下的問(wèn)題,增加了服務(wù)發(fā)現(xiàn)處理的靈活性和有效性。
需要說(shuō)明的是,該服務(wù)發(fā)現(xiàn)的處理裝置是與上述服務(wù)發(fā)現(xiàn)的處理方法相對(duì)應(yīng)的裝置,其中上述方法實(shí)施例中所有實(shí)現(xiàn)方式均適用于該裝置的實(shí)施例中,也能達(dá)到同樣的技術(shù)效果。
在本發(fā)明的各種實(shí)施例中,應(yīng)理解,上述各過(guò)程的序號(hào)的大小并不意味著 執(zhí)行順序的先后,各過(guò)程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對(duì)本發(fā)明實(shí)施例的實(shí)施過(guò)程構(gòu)成任何限定。
以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。