一種外部服務(wù)的調(diào)用方法及系統(tǒng)的制作方法
【專利摘要】本申請(qǐng)公開了一種外部服務(wù)的調(diào)用方法及系統(tǒng),用以解決現(xiàn)有技術(shù)中系統(tǒng)調(diào)用異常的外部服務(wù)時(shí)浪費(fèi)網(wǎng)絡(luò)資源,也可能使自身的其他服務(wù)發(fā)生異常的問(wèn)題。該方法系統(tǒng)針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù),判斷該外部服務(wù)是否異常,若是,則從當(dāng)前所有要調(diào)用該外部服務(wù)的調(diào)用請(qǐng)求中選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求發(fā)送,否則,直接發(fā)送該調(diào)用請(qǐng)求。通過(guò)上述方法,當(dāng)外部服務(wù)發(fā)生異常時(shí),系統(tǒng)不會(huì)發(fā)送調(diào)用該異常的外部服務(wù)的所有調(diào)用請(qǐng)求,而是只發(fā)送其中的一部分調(diào)用請(qǐng)求,因此可有效避免網(wǎng)絡(luò)資源的浪費(fèi),該系統(tǒng)也不會(huì)由于等待大量的超時(shí)請(qǐng)求而導(dǎo)致自身的其他服務(wù)發(fā)生異常。
【專利說(shuō)明】一種外部服務(wù)的調(diào)用方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及通信【技術(shù)領(lǐng)域】,尤其涉及一種外部服務(wù)的調(diào)用方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)應(yīng)用的發(fā)展,各應(yīng)用系統(tǒng)之間的依賴性也越來(lái)越強(qiáng),目前,可單獨(dú)為用戶提供服務(wù)的應(yīng)用系統(tǒng)已經(jīng)幾乎不存在,對(duì)于一個(gè)系統(tǒng)而言,該系統(tǒng)或多或少都要調(diào)用其他系統(tǒng)的服務(wù)向用戶提供,也就是調(diào)用外部服務(wù)。
[0003]例如,A網(wǎng)站是一個(gè)購(gòu)物網(wǎng)站,而用戶在A網(wǎng)站上購(gòu)買商品后,A網(wǎng)站就需要調(diào)用B網(wǎng)站提供的支付服務(wù),使用戶為其購(gòu)買的商品付款。對(duì)于A網(wǎng)站來(lái)說(shuō),其調(diào)用的B網(wǎng)站提供的支付服務(wù)就是外部服務(wù)。
[0004]在現(xiàn)有技術(shù)中,一個(gè)系統(tǒng)(以下稱為本系統(tǒng))調(diào)用其他系統(tǒng)的外部服務(wù)時(shí),如果其他系統(tǒng)所提供的外部服務(wù)發(fā)生異常而不可用,則本系統(tǒng)會(huì)持續(xù)不斷的向其他系統(tǒng)發(fā)送調(diào)用請(qǐng)求,這不但會(huì)浪費(fèi)網(wǎng)絡(luò)資源,而且當(dāng)調(diào)用異常的外部服務(wù)的數(shù)量較多時(shí),本系統(tǒng)也很有可能會(huì)由于等待大量的超時(shí)請(qǐng)求而堵塞,使自身的其他服務(wù)也發(fā)生異常。
【發(fā)明內(nèi)容】
[0005]本申請(qǐng)實(shí)施例提供一種外部服務(wù)的調(diào)用方法及系統(tǒng),用以解決現(xiàn)有技術(shù)中系統(tǒng)調(diào)用異常的外部服務(wù)時(shí)浪費(fèi)網(wǎng)絡(luò)資源,也可能使自身的其他服務(wù)發(fā)生異常的問(wèn)題。
[0006]本申請(qǐng)實(shí)施例提供的一種外部服務(wù)的調(diào)用方法,包括:
[0007]系統(tǒng)針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定所述調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù);并
[0008]判斷確定的所述外部服務(wù)是否異常;
[0009]若是,則從當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求中,選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求并發(fā)送;
[0010]否則,發(fā)送所述調(diào)用請(qǐng)求。
[0011]本申請(qǐng)實(shí)施例提供的一種外部服務(wù)的調(diào)用系統(tǒng),包括:
[0012]確定模塊,用于針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定所述調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù);
[0013]判斷處理模塊,用于判斷確定的所述外部服務(wù)是否異常;若是,則從當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求中,選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求并發(fā)送;否則,發(fā)送所述調(diào)用請(qǐng)求。
[0014]本申請(qǐng)實(shí)施例提供一種外部服務(wù)的調(diào)用方法及系統(tǒng),該方法系統(tǒng)針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù),判斷該外部服務(wù)是否異常,若是,則從當(dāng)前所有要調(diào)用該外部服務(wù)的調(diào)用請(qǐng)求中選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求發(fā)送,否則,直接發(fā)送該調(diào)用請(qǐng)求。通過(guò)上述方法,當(dāng)外部服務(wù)發(fā)生異常時(shí),系統(tǒng)不會(huì)發(fā)送調(diào)用該異常的外部服務(wù)的所有調(diào)用請(qǐng)求,而是只發(fā)送其中的一部分調(diào)用請(qǐng)求,因此可有效避免網(wǎng)絡(luò)資源的浪費(fèi),該系統(tǒng)也不會(huì)由于等待大量的超時(shí)請(qǐng)求而導(dǎo)致自身的其他服務(wù)發(fā)生異常。
【專利附圖】
【附圖說(shuō)明】
[0015]圖1為本申請(qǐng)實(shí)施例提供的外部服務(wù)的調(diào)用過(guò)程;
[0016]圖2為本申請(qǐng)實(shí)施例提供的外部服務(wù)的詳細(xì)調(diào)用過(guò)程;
[0017]圖3為本申請(qǐng)實(shí)施例提供的外部服務(wù)的調(diào)用系統(tǒng)結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0018]本申請(qǐng)實(shí)施例中由系統(tǒng)自行判斷調(diào)用的外部服務(wù)是否發(fā)生異常,若異常,則從當(dāng)前所有要調(diào)用該異常的外部服務(wù)的調(diào)用請(qǐng)求中選擇一部分調(diào)用請(qǐng)求發(fā)送,否則,直接發(fā)送調(diào)用請(qǐng)求,可有效節(jié)約網(wǎng)絡(luò)資源,并避免系統(tǒng)調(diào)用異常的外部服務(wù)時(shí)自身發(fā)生堵塞的問(wèn)題。
[0019]下面結(jié)合說(shuō)明書附圖,對(duì)本申請(qǐng)實(shí)施例進(jìn)行詳細(xì)描述。
[0020]圖1為本申請(qǐng)實(shí)施例提供的外部服務(wù)的調(diào)用過(guò)程,具體包括以下步驟:
[0021]SlOl:系統(tǒng)針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù)。
[0022]在本申請(qǐng)實(shí)施例中,系統(tǒng)(以下稱為本系統(tǒng))在調(diào)用一個(gè)外部服務(wù)(以下將提供外部服務(wù)的系統(tǒng)稱為其他系統(tǒng))時(shí),需先向其他系統(tǒng)發(fā)送調(diào)用該外部服務(wù)的調(diào)用請(qǐng)求,而本系統(tǒng)在發(fā)送該調(diào)用請(qǐng)求之前,先將其攔截,也即,攔截該調(diào)用請(qǐng)求的發(fā)送。
[0023]例如,當(dāng)本系統(tǒng)要調(diào)用其他系統(tǒng)提供的支付服務(wù)時(shí),先生成調(diào)用該支付服務(wù)的調(diào)用請(qǐng)求,并攔截該調(diào)用請(qǐng)求的發(fā)送。
[0024]攔截該調(diào)用請(qǐng)求的發(fā)送后,本系統(tǒng)可根據(jù)該調(diào)用請(qǐng)求攜帶的外部服務(wù)的標(biāo)識(shí),確定該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù)。
[0025]繼續(xù)沿用上例,本系統(tǒng)可根據(jù)該調(diào)用請(qǐng)求中攜帶的外部服務(wù)的標(biāo)識(shí),確定該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù)為支付服務(wù)。
[0026]S102:判斷確定的該外部服務(wù)是否異常,若是,則執(zhí)行步驟S103,否則執(zhí)行步驟S104。
[0027]在本申請(qǐng)實(shí)施例中,本系統(tǒng)可自行判斷步驟SlOl確定的外部服務(wù)是否異常。具體的,本系統(tǒng)可記錄該外部服務(wù)的異常調(diào)用次數(shù),在判斷該外部服務(wù)是否異常時(shí),可判斷當(dāng)前記錄的該外部服務(wù)的異常調(diào)用次數(shù)是否不小于設(shè)定閾值,若是,則判定該外部服務(wù)異常,否貝U,判定該外部服務(wù)正常。其中,該設(shè)定閾值可根據(jù)需要進(jìn)行設(shè)定。
[0028]繼續(xù)沿用上例,假設(shè)設(shè)定閾值為N (N大于0),則本系統(tǒng)確定了該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù)為支付服務(wù)后,判斷當(dāng)前記錄的該支付服務(wù)的異常調(diào)用次數(shù)是否不小于N,若是,則判定該支付服務(wù)異常,否則,判定該支付服務(wù)正常。
[0029]S103:從當(dāng)前所有要調(diào)用該外部服務(wù)的調(diào)用請(qǐng)求中,選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求并發(fā)送。
[0030]當(dāng)本系統(tǒng)判定該外部服務(wù)異常時(shí),先確定當(dāng)前所有要調(diào)用該外部服務(wù)的調(diào)用請(qǐng)求,然后從確定出的各調(diào)用請(qǐng)求中選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求發(fā)送。
[0031]并且,由于在步驟S102中,本系統(tǒng)是通過(guò)記錄的該外部服務(wù)的異常調(diào)用次數(shù)來(lái)判斷該外部服務(wù)是否異常的,因此,本系統(tǒng)在將選擇出的調(diào)用請(qǐng)求發(fā)送給其他系統(tǒng)后,還要根據(jù)發(fā)送的調(diào)用請(qǐng)求對(duì)該外部服務(wù)的調(diào)用情況,更新記錄的該外部服務(wù)的異常調(diào)用次數(shù)。具體的,本系統(tǒng)可針對(duì)每個(gè)已發(fā)送調(diào)用請(qǐng)求(已經(jīng)發(fā)送給其他系統(tǒng)的調(diào)用請(qǐng)求稱為已發(fā)送調(diào)用請(qǐng)求),判斷該已發(fā)送調(diào)用請(qǐng)求是否成功調(diào)用到該外部服務(wù),若是,則將記錄的該外部服務(wù)的異常調(diào)用次數(shù)清零,否則,將記錄的該外部服務(wù)的異常調(diào)用次數(shù)加I。
[0032]其中,本系統(tǒng)針對(duì)一個(gè)已發(fā)送調(diào)用請(qǐng)求,判斷該已發(fā)送調(diào)用請(qǐng)求是否成功調(diào)用到該外部服務(wù)的方法可以為:發(fā)送該發(fā)送調(diào)用請(qǐng)求后,如果在指定時(shí)長(zhǎng)內(nèi)接收到相應(yīng)的調(diào)用響應(yīng),且該調(diào)用響應(yīng)不是調(diào)用失敗響應(yīng),則判定該已發(fā)送調(diào)用請(qǐng)求成功調(diào)用到該外部服務(wù),如果在指定時(shí)長(zhǎng)內(nèi)未接收到相應(yīng)的調(diào)用響應(yīng),或者接收到的調(diào)用響應(yīng)為調(diào)用失敗響應(yīng),則判定該已發(fā)送調(diào)用請(qǐng)求未成功調(diào)用到該外部服務(wù)。
[0033]繼續(xù)沿用上例,當(dāng)本系統(tǒng)判定該支付服務(wù)異常時(shí),則確定當(dāng)前要調(diào)用該支付服務(wù)的所有調(diào)用請(qǐng)求。假設(shè)當(dāng)前要調(diào)用該支付服務(wù)的調(diào)用請(qǐng)求有100個(gè),且設(shè)定數(shù)量為1,則本系統(tǒng)從這100個(gè)調(diào)用請(qǐng)求中任意選擇一個(gè)發(fā)送給其他系統(tǒng),以調(diào)用其他系統(tǒng)的支付服務(wù),其余的99個(gè)調(diào)用請(qǐng)求則直接返回調(diào)用失敗結(jié)果。
[0034]本系統(tǒng)將選擇出的這個(gè)調(diào)用請(qǐng)求發(fā)送給其他系統(tǒng)后,還要判斷將該調(diào)用請(qǐng)求發(fā)送給其他系統(tǒng)后,發(fā)送的該調(diào)用請(qǐng)求是否成功調(diào)用到支付服務(wù),若是,則將記錄的支付服務(wù)的異常調(diào)用次數(shù)清零,否則,本系統(tǒng)將記錄的支付服務(wù)的異常調(diào)用次數(shù)加I。
[0035]如果支付服務(wù)當(dāng)前仍然異常,則本系統(tǒng)本次發(fā)送的該調(diào)用請(qǐng)求必然不能成功的調(diào)用到支付服務(wù),而此時(shí)記錄的支付服務(wù)的異常調(diào)用次數(shù)已經(jīng)不小于閾值N,因此將異常調(diào)用次數(shù)加I后,更新的異常調(diào)用次數(shù)仍不小于N,從而在下一次要發(fā)送調(diào)用支付服務(wù)的調(diào)用請(qǐng)求時(shí),本系統(tǒng)仍然會(huì)只發(fā)送I (設(shè)定數(shù)量)個(gè)調(diào)用請(qǐng)求,并根據(jù)調(diào)用情況更新異常調(diào)用次數(shù)。
[0036]相反的,如果支付服務(wù)當(dāng)前已經(jīng)恢復(fù)正常,則本系統(tǒng)本次發(fā)送的該調(diào)用請(qǐng)求可以成功的調(diào)用到支付服務(wù),從而將支付服務(wù)的異常調(diào)用次數(shù)清零,而由于N大于0,因此下一次要發(fā)送調(diào)用支付服務(wù)的調(diào)用請(qǐng)求時(shí),步驟S102的判斷結(jié)果為否,直接執(zhí)行步驟S104,即直接發(fā)送調(diào)用請(qǐng)求。
[0037]由此可見(jiàn),本系統(tǒng)在外部服務(wù)異常時(shí)發(fā)送的設(shè)定數(shù)量的調(diào)用請(qǐng)求實(shí)際上相當(dāng)于是在試探該外部服務(wù)當(dāng)前是否已經(jīng)恢復(fù)正常,如果已經(jīng)恢復(fù)正常,則將異常調(diào)用次數(shù)清零,后續(xù)經(jīng)過(guò)步驟S102的判斷后,可直接執(zhí)行步驟S104,即直接發(fā)送調(diào)用請(qǐng)求,而如果尚未恢復(fù)正常,則本系統(tǒng)每次只發(fā)送設(shè)定數(shù)量的調(diào)用請(qǐng)求,繼續(xù)試探該外部服務(wù)是否恢復(fù)正常。
[0038]另外,當(dāng)本系統(tǒng)記錄的外部服務(wù)的異常調(diào)用次數(shù)已經(jīng)不小于設(shè)定閾值時(shí),由于將異常調(diào)用次數(shù)再加I后仍然會(huì)不小于該設(shè)定閾值,因此,本申請(qǐng)實(shí)施例中對(duì)于記錄的已經(jīng)達(dá)到該設(shè)定閾值的外部服務(wù)的異常調(diào)用次數(shù),如果判定已發(fā)送調(diào)用請(qǐng)求未成功調(diào)用到該外部服務(wù),則也可以不對(duì)記錄的該外部請(qǐng)求的異常調(diào)用次數(shù)進(jìn)行任何操作,以避免不斷的將異常調(diào)用次數(shù)加I可能出現(xiàn)的溢出錯(cuò)誤。
[0039]較佳的,為了進(jìn)一步提高本系統(tǒng)判斷外部服務(wù)是否異常的準(zhǔn)確性,在本申請(qǐng)實(shí)施例中,本系統(tǒng)針對(duì)每個(gè)已發(fā)送調(diào)用請(qǐng)求,判定該已發(fā)送調(diào)用請(qǐng)求已經(jīng)成功調(diào)用到相應(yīng)的外部服務(wù)后,在將記錄的該外部服務(wù)的異常調(diào)用次數(shù)清零之前,還要確定該外部服務(wù)的執(zhí)行時(shí)間不大于設(shè)定時(shí)間長(zhǎng)度。也即,在判定該已發(fā)送調(diào)用請(qǐng)求成功調(diào)用到該外部服務(wù)后,判斷該外部服務(wù)的執(zhí)行時(shí)間是否不大于設(shè)定時(shí)間長(zhǎng)度,若是,則將該外部服務(wù)的異常調(diào)用次數(shù)清零,否則,將該外部服務(wù)的異常調(diào)用次數(shù)加I。
[0040]其中,由于該外部服務(wù)是由提供該外部服務(wù)的其他系統(tǒng)所執(zhí)行的,因此,本系統(tǒng)在判定一個(gè)已發(fā)送調(diào)用請(qǐng)求已經(jīng)成功調(diào)用到該外部服務(wù)后,判斷該外部服務(wù)的執(zhí)行時(shí)間是否不大于設(shè)定時(shí)間長(zhǎng)度時(shí),可將從發(fā)送該已發(fā)送調(diào)用請(qǐng)求開始,至接收到該外部服務(wù)的執(zhí)行結(jié)果為止的時(shí)間長(zhǎng)度,作為該已發(fā)送調(diào)用請(qǐng)求所調(diào)用到的該外部服務(wù)的執(zhí)行時(shí)間。
[0041]S104:發(fā)送該調(diào)用請(qǐng)求。
[0042]通過(guò)上述方法,當(dāng)外部服務(wù)發(fā)生異常時(shí),系統(tǒng)不會(huì)發(fā)送調(diào)用該異常的外部服務(wù)的所有調(diào)用請(qǐng)求,而是只發(fā)送其中設(shè)定數(shù)量(如上例中為I個(gè))的調(diào)用請(qǐng)求,用以試探該外部服務(wù)是否恢復(fù)正常,因此可有效避免網(wǎng)絡(luò)資源的浪費(fèi),而且本系統(tǒng)也不會(huì)因等待大量的超時(shí)請(qǐng)求而堵塞,可有效避免本系統(tǒng)的其他服務(wù)發(fā)生異常。
[0043]另外,在現(xiàn)有技術(shù)中,當(dāng)外部服務(wù)出現(xiàn)異常時(shí),通常是人為的確定出現(xiàn)異常的外部服務(wù),再人為的阻止本系統(tǒng)向外發(fā)送調(diào)用該異常的外部服務(wù)的調(diào)用請(qǐng)求,當(dāng)外部服務(wù)恢復(fù)正常時(shí),也是人為的控制本系統(tǒng)重新向外發(fā)送調(diào)用該恢復(fù)正常的外部服務(wù)的調(diào)用請(qǐng)求。而在上述方法中,無(wú)需人為的發(fā)現(xiàn)出現(xiàn)異常的外部服務(wù),也無(wú)需人為的控制本系統(tǒng)重新向外發(fā)送調(diào)用恢復(fù)正常的外部服務(wù)的調(diào)用請(qǐng)求,本系統(tǒng)可根據(jù)記錄的外部服務(wù)的異常調(diào)用次數(shù)判定該外部服務(wù)是否出現(xiàn)異常,并且當(dāng)外部服務(wù)發(fā)生異常時(shí),本系統(tǒng)發(fā)送設(shè)定數(shù)量的調(diào)用請(qǐng)求來(lái)試探該外部服務(wù)是否恢復(fù)正常,一旦發(fā)現(xiàn)外部服務(wù)恢復(fù)正常,則將該外部服務(wù)的異常調(diào)用次數(shù)清零,因此,本系統(tǒng)可及時(shí)的獲知外部服務(wù)是否出現(xiàn)異常、是否已經(jīng)恢復(fù)正常,無(wú)需人為的干預(yù)。
[0044]進(jìn)一步的,在圖1所示的步驟S103中,本系統(tǒng)從當(dāng)前所有要調(diào)用該外部服務(wù)的調(diào)用請(qǐng)求中選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求的方法具體可以為:通過(guò)當(dāng)前所有要調(diào)用該外部服務(wù)的調(diào)用請(qǐng)求所在的線程獲取設(shè)定數(shù)量的公共資源,將獲取到公共資源的線程中的調(diào)用請(qǐng)求確定為選擇的調(diào)用請(qǐng)求,并發(fā)送,其中,一個(gè)調(diào)用請(qǐng)求占用一個(gè)線程,一個(gè)線程最多獲取一個(gè)公共資源。其中,該公共資源可以是通過(guò)編程語(yǔ)言實(shí)現(xiàn)的鎖變量。
[0045]具體的,可針對(duì)每個(gè)外部服務(wù)預(yù)設(shè)設(shè)定數(shù)量的公共資源,其中,針對(duì)各外部服務(wù)預(yù)設(shè)的公共資源的數(shù)量可以相同,也可以不同。如,可針對(duì)外部服務(wù)A設(shè)定I個(gè)公共資源,針對(duì)外部服務(wù)B設(shè)定2個(gè)公共資源。本系統(tǒng)通過(guò)如圖1所示的步驟SlOl?S102攔截到待發(fā)送的調(diào)用請(qǐng)求,確定了該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù),并判定確定的該外部服務(wù)異常后,可直接通過(guò)該調(diào)用請(qǐng)求所在的線程獲取針對(duì)該外部服務(wù)預(yù)設(shè)的設(shè)定數(shù)量的公共資源,若該線程獲取到針對(duì)該外部服務(wù)預(yù)設(shè)的公共資源,則發(fā)送該調(diào)用請(qǐng)求,否則,直接返回調(diào)用失敗結(jié)果。
[0046]繼續(xù)沿用上例,假設(shè)針對(duì)支付服務(wù)預(yù)設(shè)了 I (設(shè)定數(shù)量)個(gè)公共資源,也即,針對(duì)支付服務(wù)預(yù)設(shè)了 I個(gè)鎖。本系統(tǒng)攔截到第一個(gè)要調(diào)用該支付服務(wù)的調(diào)用請(qǐng)求后,如果判定當(dāng)前支付服務(wù)異常,則通過(guò)該第一個(gè)調(diào)用請(qǐng)求所在線程進(jìn)行取鎖操作(即,獲取針對(duì)支付服務(wù)預(yù)設(shè)的公共資源),如果當(dāng)前該鎖尚未被其他線程取走,則該第一個(gè)調(diào)用請(qǐng)求所在的線程可以取到鎖,因此本系統(tǒng)發(fā)送該第一個(gè)調(diào)用請(qǐng)求。
[0047]而如果本系統(tǒng)又?jǐn)r截到第二個(gè)要調(diào)用該支付服務(wù)的調(diào)用請(qǐng)求,仍判定當(dāng)前支付服務(wù)異常,則同樣通過(guò)該第二個(gè)調(diào)用請(qǐng)求所在的線程進(jìn)行取鎖操作。由于針對(duì)支付服務(wù)預(yù)設(shè)的這唯一的一個(gè)鎖變量已經(jīng)被第一個(gè)調(diào)用請(qǐng)求所在的線程取走,因此,第二個(gè)調(diào)用請(qǐng)求所在的線程無(wú)法取到鎖,從而本系統(tǒng)直接返回第二個(gè)調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用失敗結(jié)果,不發(fā)送該第二個(gè)調(diào)用請(qǐng)求。
[0048]圖2為本申請(qǐng)實(shí)施例提供的外部服務(wù)的詳細(xì)調(diào)用過(guò)程,具體包括以下步驟:
[0049]S201:系統(tǒng)攔截待發(fā)送的調(diào)用請(qǐng)求。
[0050]S202:確定該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù)。
[0051]S203:判斷當(dāng)前記錄的該外部服務(wù)的異常調(diào)用次數(shù)是否不小于設(shè)定閾值,若是,執(zhí)行步驟S204,否則執(zhí)行步驟S206。
[0052]S204:通過(guò)該調(diào)用請(qǐng)求所在的線程獲取針對(duì)該外部服務(wù)預(yù)設(shè)的公共資源。
[0053]S205:判斷該線程是否獲取到公共資源,若是,則執(zhí)行步驟S206,否則執(zhí)行步驟S211。
[0054]S206:發(fā)送該調(diào)用請(qǐng)求。
[0055]S207:判斷發(fā)送的該調(diào)用請(qǐng)求是否成功調(diào)用該外部服務(wù),若是,則執(zhí)行步驟S208,否則執(zhí)行步驟S210。
[0056]S208:判斷該外部服務(wù)的執(zhí)行時(shí)間是否不大于設(shè)定時(shí)間長(zhǎng)度,若是,則執(zhí)行步驟S209,否則執(zhí)行步驟S210。
[0057]S209:將該外部服務(wù)的異常調(diào)用次數(shù)清零,返回該外部服務(wù)的執(zhí)行結(jié)果。
[0058]S210:將該外部服務(wù)的異常調(diào)用次數(shù)加1,返回調(diào)用失敗結(jié)果。
[0059]S211:返回調(diào)用失敗結(jié)果。
[0060]以上為本申請(qǐng)實(shí)施例提供的外部服務(wù)的調(diào)用方法,基于同樣的思路,本申請(qǐng)實(shí)施例還提供一種外部服務(wù)的調(diào)用系統(tǒng),如圖3所示。
[0061]圖3為本申請(qǐng)實(shí)施例提供的外部服務(wù)的調(diào)用系統(tǒng)結(jié)構(gòu)示意圖,具體包括:
[0062]確定模塊301,用于針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定所述調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù);
[0063]判斷處理模塊302,用于判斷確定的所述外部服務(wù)是否異常;若是,則從當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求中,選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求并發(fā)送;否則,發(fā)送所述調(diào)用請(qǐng)求。
[0064]所述判斷處理模塊302具體用于,判斷當(dāng)前記錄的所述外部服務(wù)的異常調(diào)用次數(shù)是否不小于設(shè)定閾值,若是,則判定所述外部服務(wù)異常,否則,判定所述外部服務(wù)正常;
[0065]所述系統(tǒng)還包括:
[0066]更新模塊303,用于在所述判斷處理模塊302發(fā)送調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求之后,根據(jù)發(fā)送的調(diào)用請(qǐng)求對(duì)所述外部服務(wù)的調(diào)用情況,更新記錄的所述外部服務(wù)的異常調(diào)用次數(shù)。
[0067]所述更新模塊303具體用于,針對(duì)每個(gè)已發(fā)送調(diào)用請(qǐng)求,判斷該已發(fā)送調(diào)用請(qǐng)求是否成功調(diào)用所述外部服務(wù),若是,則將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)清零,否則,將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)加I。
[0068]所述更新模塊303還用于,在將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)清零之前,確定所述外部服務(wù)的執(zhí)行時(shí)間不大于設(shè)定時(shí)間長(zhǎng)度。
[0069]所述判斷處理模塊302具體用于,通過(guò)當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求所在的線程獲取設(shè)定數(shù)量的公共資源,并將獲取到公共資源的線程中的調(diào)用請(qǐng)求確定為選擇的調(diào)用請(qǐng)求并發(fā)送,其中,一個(gè)調(diào)用請(qǐng)求占用一個(gè)線程,一個(gè)線程最多獲取一個(gè)公共資源。
[0070]本申請(qǐng)實(shí)施例提供一種外部服務(wù)的調(diào)用方法及系統(tǒng),該方法系統(tǒng)針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定該調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù),判斷該外部服務(wù)是否異常,若是,則從當(dāng)前所有要調(diào)用該外部服務(wù)的調(diào)用請(qǐng)求中選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求發(fā)送,否則,直接發(fā)送該調(diào)用請(qǐng)求。通過(guò)上述方法,當(dāng)外部服務(wù)發(fā)生異常時(shí),系統(tǒng)不會(huì)發(fā)送調(diào)用該異常的外部服務(wù)的所有調(diào)用請(qǐng)求,而是只發(fā)送其中的一部分調(diào)用請(qǐng)求,因此可有效避免網(wǎng)絡(luò)資源的浪費(fèi),該系統(tǒng)也不會(huì)由于等待大量的超時(shí)請(qǐng)求而導(dǎo)致自身的其他服務(wù)發(fā)生異常。
[0071]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
[0072]在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
[0073]內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
[0074]計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
[0075]本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
[0076]這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
[0077]這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
[0078]盡管已描述了本申請(qǐng)的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)范圍的所有變更和修改。
[0079]顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)實(shí)施例進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)實(shí)施例的精神和范圍。這樣,倘若本申請(qǐng)實(shí)施例的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。
【權(quán)利要求】
1.一種外部服務(wù)的調(diào)用方法,其特征在于,包括: 系統(tǒng)針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定所述調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù);并判斷確定的所述外部服務(wù)是否異常; 若是,則從當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求中,選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求并發(fā)送; 否則,發(fā)送所述調(diào)用請(qǐng)求。
2.如權(quán)利要求1所述的方法,其特征在于,判斷確定的所述外部服務(wù)是否異常,具體包括: 判斷當(dāng)前記錄的所述外部服務(wù)的異常調(diào)用次數(shù)是否不小于設(shè)定閾值,若是,則判定所述外部服務(wù)異常,否則,判定所述外部服務(wù)正常; 發(fā)送調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求之后,所述方法還包括: 根據(jù)發(fā)送的調(diào)用請(qǐng)求對(duì)所述外部服務(wù)的調(diào)用情況,更新記錄的所述外部服務(wù)的異常調(diào)用次數(shù)。
3.如權(quán)利要求2所述的方法,其特征在于,根據(jù)發(fā)送的調(diào)用請(qǐng)求對(duì)所述外部服務(wù)的調(diào)用情況,更新記錄的所述外部服務(wù)的異常調(diào)用次數(shù),具體包括: 針對(duì)每個(gè)已發(fā)送調(diào)用請(qǐng)求,判斷該已發(fā)送調(diào)用請(qǐng)求是否成功調(diào)用所述外部服務(wù); 若是,則將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)清零; 否則,將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)加I。
4.如權(quán)利要求3所述的方法,其特征在于,將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)清零之前,所述方法還包括: 確定所述外部服務(wù)的執(zhí)行時(shí)間不大于設(shè)定時(shí)間長(zhǎng)度。
5.如權(quán)利要求1所述的方法,其特征在于,從當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求中,選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求并發(fā)送,具體包括: 通過(guò)當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求所在的線程獲取設(shè)定數(shù)量的公共資源,其中,一個(gè)調(diào)用請(qǐng)求占用一個(gè)線程,一個(gè)線程最多獲取一個(gè)公共資源;并 將獲取到公共資源的線程中的調(diào)用請(qǐng)求確定為選擇的調(diào)用請(qǐng)求,并發(fā)送。
6.一種外部服務(wù)的調(diào)用系統(tǒng),其特征在于,包括: 確定模塊,用于針對(duì)待發(fā)送的調(diào)用請(qǐng)求,確定所述調(diào)用請(qǐng)求所要調(diào)用的外部服務(wù); 判斷處理模塊,用于判斷確定的所述外部服務(wù)是否異常;若是,則從當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求中,選擇設(shè)定數(shù)量的調(diào)用請(qǐng)求并發(fā)送;否則,發(fā)送所述調(diào)用請(qǐng)求。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述判斷處理模塊具體用于,判斷當(dāng)前記錄的所述外部服務(wù)的異常調(diào)用次數(shù)是否不小于設(shè)定閾值,若是,則判定所述外部服務(wù)異常,否貝U,判定所述外部服務(wù)正常; 所述系統(tǒng)還包括: 更新模塊,用于在所述判斷處理模塊發(fā)送調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求之后,根據(jù)發(fā)送的調(diào)用請(qǐng)求對(duì)所述外部服務(wù)的調(diào)用情況,更新記錄的所述外部服務(wù)的異常調(diào)用次數(shù)。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述更新模塊具體用于,針對(duì)每個(gè)已發(fā)送調(diào)用請(qǐng)求,判斷該已發(fā)送調(diào)用請(qǐng)求是否成功調(diào)用所述外部服務(wù),若是,則將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)清零,否則,將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)加I。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述更新模塊還用于,在將記錄的所述外部服務(wù)的異常調(diào)用次數(shù)清零之前,確定所述外部服務(wù)的執(zhí)行時(shí)間不大于設(shè)定時(shí)間長(zhǎng)度。
10.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述判斷處理模塊具體用于,通過(guò)當(dāng)前所有要調(diào)用所述外部服務(wù)的調(diào)用請(qǐng)求所在的線程獲取設(shè)定數(shù)量的公共資源,并將獲取到公共資源的線程中的調(diào)用請(qǐng)求確定為選擇的調(diào)用請(qǐng)求并發(fā)送,其中,一個(gè)調(diào)用請(qǐng)求占用一個(gè)線程,一個(gè)線程最多獲取一個(gè)公共資源。
【文檔編號(hào)】G06F11/00GK104239156SQ201310249873
【公開日】2014年12月24日 申請(qǐng)日期:2013年6月21日 優(yōu)先權(quán)日:2013年6月21日
【發(fā)明者】李凱, 謝謙 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司