一種數(shù)據(jù)傳輸?shù)姆椒把b置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)傳輸?shù)姆椒把b置。
【背景技術(shù)】
[0002]消息中間件在傳統(tǒng)行業(yè)的發(fā)展中經(jīng)歷過(guò)三個(gè)架構(gòu)設(shè)計(jì)方向的轉(zhuǎn)變,第一代的消息中間件主要實(shí)現(xiàn)了消息中轉(zhuǎn)的平臺(tái)的功能,通過(guò)該消息中間件傳輸?shù)南⒖纱罂尚。瑸榱吮WC體積比較大的消息的傳輸,在架構(gòu)上偏向于實(shí)現(xiàn)對(duì)于大批量或者體積比較大的數(shù)據(jù)進(jìn)行異地傳輸。第二代的消息中間件主要實(shí)現(xiàn)了消息隊(duì)列的功能,第二代的消息中間件偏向于解決多語(yǔ)言、多協(xié)議的兼容性問(wèn)題,忽視了作為消息中間件的性能問(wèn)題。第三代的消息中間件也主要實(shí)現(xiàn)了消息隊(duì)列的功能,更多的是以消息隊(duì)列為核心,著重解決消息隊(duì)列的性能問(wèn)題,使其成為高性能的消息中轉(zhuǎn)組件。目前,常用的消息中間件為第三代的消息中間件。
[0003]目前,在消息中間件中,消息中間件中的消息隊(duì)列用來(lái)接收外部發(fā)來(lái)的數(shù)據(jù)文件,但是,當(dāng)外部發(fā)來(lái)的數(shù)據(jù)文件的大小超過(guò)消息隊(duì)列最大能夠接收的大小時(shí),就會(huì)傳輸失敗。舉例來(lái)說(shuō),消息中間件中的消息隊(duì)列能夠接收的一條消息的最大數(shù)據(jù)量為512K,當(dāng)發(fā)來(lái)的數(shù)據(jù)文件超過(guò)512K時(shí),該數(shù)據(jù)文件不能被消息隊(duì)列接收,數(shù)據(jù)傳輸失敗??傊?,現(xiàn)有技術(shù)中的消息隊(duì)列無(wú)法傳輸數(shù)據(jù)量較大的數(shù)據(jù)文件。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種數(shù)據(jù)傳輸?shù)姆椒把b置,能夠通過(guò)消息隊(duì)列傳輸數(shù)據(jù)量較大的數(shù)據(jù)文件。
[0005]—方面,本發(fā)明提供了一種數(shù)據(jù)傳輸?shù)姆椒?,包?預(yù)先建立待傳輸?shù)臄?shù)據(jù)文件的標(biāo)識(shí)與文件合并同步線程的對(duì)應(yīng)關(guān)系,還包括:
[0006]S1:從當(dāng)前數(shù)據(jù)文件中分割出切片,確定當(dāng)前數(shù)據(jù)文件的第一標(biāo)識(shí),將所述第一標(biāo)識(shí)攜帶在每個(gè)切片中,將每個(gè)切片依次存儲(chǔ)在消息隊(duì)列中;
[0007]S2:接收所述消息隊(duì)列輸出的每個(gè)切片,并獲取每個(gè)切片中攜帶的第一標(biāo)識(shí);
[0008]S3:根據(jù)所述第一標(biāo)識(shí)和所述對(duì)應(yīng)關(guān)系,確定所述第一標(biāo)識(shí)對(duì)應(yīng)的文件合并同步線程;
[0009]S4:調(diào)用所述第一標(biāo)識(shí)對(duì)應(yīng)的文件合并同步線程,通過(guò)所述第一標(biāo)識(shí)對(duì)應(yīng)的文件合并同步線程合并所述消息隊(duì)列輸出的當(dāng)前數(shù)據(jù)文件的切片,獲得當(dāng)前數(shù)據(jù)文件;
[0010]其中,每個(gè)切片的數(shù)據(jù)量小于等于所述消息隊(duì)列能夠傳輸?shù)那衅淖畲髷?shù)據(jù)量。
[0011]進(jìn)一步地,所述SI中,所述從當(dāng)前數(shù)據(jù)文件中分割出切片,將每個(gè)切片依次存儲(chǔ)在消息隊(duì)列中,包括:
[0012]Al:將當(dāng)前數(shù)據(jù)文件的文件頭作為當(dāng)前切片起點(diǎn);
[0013]A2:從當(dāng)前切片起點(diǎn)開(kāi)始,從當(dāng)前數(shù)據(jù)文件中獲取預(yù)設(shè)值個(gè)切片數(shù)據(jù),將獲取的所述切片數(shù)據(jù)作為當(dāng)前數(shù)據(jù)文件的當(dāng)前切片;
[0014]A3:將當(dāng)前切片發(fā)送給所述消息隊(duì)列;
[0015]A4:判斷當(dāng)前數(shù)據(jù)文件中是否有未被分割的數(shù)據(jù),如果是,則執(zhí)行步驟A5,否則,結(jié)束當(dāng)前流程;
[0016]A5:判斷當(dāng)前數(shù)據(jù)文件的未被分割的數(shù)據(jù)的數(shù)據(jù)量是否大于所述預(yù)設(shè)值,如果是,則將當(dāng)前數(shù)據(jù)文件的未被分割的數(shù)據(jù)中與當(dāng)前切片相鄰的數(shù)據(jù)作為當(dāng)前切片起點(diǎn),執(zhí)行步驟A2,否則,將未被分割的數(shù)據(jù)作為當(dāng)前切片,執(zhí)行步驟A3 ;
[0017]其中,所述預(yù)設(shè)值小于等于所述消息隊(duì)列能夠傳輸?shù)那衅淖畲髷?shù)據(jù)量。
[0018]進(jìn)一步地,所述步驟SI中,所述確定當(dāng)前數(shù)據(jù)文件的第一標(biāo)識(shí),包括:
[0019]將當(dāng)前數(shù)據(jù)文件的文件名的字符串、文件大小的字符串、最后修改時(shí)間的字符串拼接到一起,得到當(dāng)前數(shù)據(jù)文件的特征碼字符串;根據(jù)所述特征碼字符串,確定所述第一標(biāo)識(shí)。
[0020]進(jìn)一步地,所述A2,還包括:將當(dāng)前切片的切片起點(diǎn)信息攜帶在當(dāng)前切片中;
[0021]所述S4中所述合并所述消息隊(duì)列輸出的當(dāng)前數(shù)據(jù)文件的切片,獲得當(dāng)前數(shù)據(jù)文件,包括:
[0022]B1:獲取當(dāng)前切片中攜帶的切片起點(diǎn)信息,根據(jù)所述切片起點(diǎn)信息確定當(dāng)前切片的起點(diǎn)和終點(diǎn);
[0023]B2:判斷當(dāng)前切片是否是當(dāng)前數(shù)據(jù)文件的第一個(gè)切片,如果是,則將所述消息隊(duì)列中當(dāng)前切片的下一個(gè)輸出的切片作為當(dāng)前切片,返回步驟BI,否則,執(zhí)行步驟B3;
[0024]B3:將當(dāng)前切片的起點(diǎn)拼接到接收到的上一個(gè)切片的終點(diǎn)之后;
[0025]B4:判斷當(dāng)前切片是否是當(dāng)前數(shù)據(jù)文件的最后一個(gè)切片,如果是,則獲得當(dāng)前數(shù)據(jù)文件,否則,將所述消息隊(duì)列中當(dāng)前切片的下一個(gè)待輸出的切片作為當(dāng)前切片,返回步驟Bl0
[0026]進(jìn)一步地,所述SI,還包括:
[0027]按照分割出的切片的時(shí)間順序,為每個(gè)切片分配順序號(hào);
[0028]在當(dāng)前數(shù)據(jù)文件的每個(gè)切片中攜帶本切片的順序號(hào);
[0029]所述S2,包括:
[0030]Cl:接收所述消息隊(duì)列輸出的當(dāng)前切片;
[0031]C2:確定當(dāng)前切片是否是當(dāng)前數(shù)據(jù)文件的第一個(gè)切片,如果是,則將所述消息隊(duì)列中當(dāng)前切片的下一個(gè)待輸出的切片作為當(dāng)前切片,返回步驟Cl,否則,執(zhí)行步驟C3;
[0032]C3:獲取所述消息隊(duì)列輸出的當(dāng)前切片中攜帶的順序號(hào);
[0033]C4:根據(jù)接收到的上一個(gè)切片的順序號(hào),確定當(dāng)前切片的順序號(hào)是否正確,如果是,則將當(dāng)前切片與已接收的切片進(jìn)行合并,執(zhí)行步驟C5,否則,向所述消息隊(duì)列返回核對(duì)失敗消息,以使所述消息隊(duì)列重新輸出當(dāng)前切片,返回步驟Cl ;
[0034]C5:判斷當(dāng)前切片是否是當(dāng)前數(shù)據(jù)文件的最后一個(gè)切片,如果是,則結(jié)束當(dāng)前流程,否則,將所述消息隊(duì)列中當(dāng)前切片的下一個(gè)待輸出的切片作為當(dāng)前切片,返回步驟Cl。
[0035]另一方面,本發(fā)明提供了一種數(shù)據(jù)傳輸?shù)难b置,包括:
[0036]標(biāo)識(shí)單元,用于建立待傳輸?shù)臄?shù)據(jù)文件的標(biāo)識(shí)與文件合并同步線程的對(duì)應(yīng)關(guān)系;
[0037]分割單元,用于從當(dāng)前數(shù)據(jù)文件中分割出切片,確定當(dāng)前數(shù)據(jù)文件的第一標(biāo)識(shí),將所述第一標(biāo)識(shí)攜帶在每個(gè)切片中,將每個(gè)切片依次存儲(chǔ)在消息隊(duì)列中;
[0038]合并單元,用于接收所述消息隊(duì)列輸出的每個(gè)切片,并獲取每個(gè)切片中攜帶的第一標(biāo)識(shí),根據(jù)所述第一標(biāo)識(shí)和所述對(duì)應(yīng)關(guān)系,確定所述第一標(biāo)識(shí)對(duì)應(yīng)的文件合并同步線程,調(diào)用所述第一標(biāo)識(shí)對(duì)應(yīng)的文件合并同步線程,通過(guò)所述第一標(biāo)識(shí)對(duì)應(yīng)的文件合并同步線程合并所述消息隊(duì)列輸出的當(dāng)前數(shù)據(jù)文件的切片,獲得當(dāng)前數(shù)據(jù)文件;
[0039]其中,每個(gè)切片的數(shù)據(jù)量小于等于所述消息隊(duì)列能夠傳輸?shù)那衅淖畲髷?shù)據(jù)量。
[0040]進(jìn)一步地,所述分割單元,在執(zhí)行所述從當(dāng)前數(shù)據(jù)文件中分割出切片,將每個(gè)切片依次存儲(chǔ)在消息隊(duì)列中時(shí),具體用于執(zhí)行:
[0041]Al:將當(dāng)前數(shù)據(jù)文件的文件頭作為當(dāng)前切片起點(diǎn);
[0042]A2:從當(dāng)前切片起點(diǎn)開(kāi)始,從當(dāng)前數(shù)據(jù)文件中獲取預(yù)設(shè)值個(gè)切片數(shù)據(jù),將獲取的所述切片數(shù)據(jù)作為當(dāng)前數(shù)據(jù)文件的當(dāng)前切片;
[0043]A3:將當(dāng)前切片發(fā)送給所述消息隊(duì)列;
[0044]A4:判斷當(dāng)前數(shù)據(jù)文件中是否有未被分割的數(shù)據(jù),如果是,則執(zhí)行步驟A5,否則,結(jié)束當(dāng)前流程;
[0045]A5:判斷當(dāng)前數(shù)據(jù)文件的未被分割的數(shù)據(jù)的數(shù)據(jù)量是否大于所述預(yù)設(shè)值,如果是,則將當(dāng)前數(shù)據(jù)文件的未被分割的數(shù)據(jù)中與當(dāng)前切片相鄰的數(shù)據(jù)作為當(dāng)前切片起點(diǎn),執(zhí)行步驟A2,否則,將未被分割的數(shù)據(jù)作為當(dāng)前切片,執(zhí)行步驟A3 ;
[0046]其中,所述預(yù)設(shè)值小于等于所述消息隊(duì)列能夠傳輸?shù)那衅淖畲髷?shù)據(jù)量。
[0047]進(jìn)一步地,所述分割單元,在執(zhí)行所述確定當(dāng)前數(shù)據(jù)文件的第一標(biāo)識(shí)時(shí),具體執(zhí)行:將當(dāng)前數(shù)據(jù)文件的文件名的字符串、文件大小的字符串、最后修改時(shí)間的字符串拼接到一起,得到當(dāng)前數(shù)據(jù)文件的特征碼字符串,根據(jù)所述特征碼字符串,確定所述第一標(biāo)識(shí)。
[0048]進(jìn)一步地,所述分割單元,還用于在所述從當(dāng)前切片起點(diǎn)開(kāi)始,從當(dāng)前數(shù)據(jù)文件中獲取預(yù)設(shè)值個(gè)切片數(shù)據(jù),將獲取的所述切片數(shù)據(jù)作為當(dāng)前數(shù)據(jù)文件的當(dāng)前切片之后,將當(dāng)前切片的切片起點(diǎn)信息攜帶在當(dāng)前切片中;
[0049]所述合并單元在執(zhí)行所述合并所述消息隊(duì)列輸出的當(dāng)前數(shù)據(jù)文件的切片,獲得當(dāng)前數(shù)據(jù)文件時(shí),具體執(zhí)行:
[0050]B1:獲取當(dāng)前切片中攜帶的切片起點(diǎn)信息,根據(jù)所述切片起點(diǎn)信息確定當(dāng)前切片的起點(diǎn)和終點(diǎn);
[0051]B2:判斷當(dāng)前切片是否是當(dāng)前數(shù)據(jù)文件的第一個(gè)切片,如果是,則將所述消息隊(duì)列中當(dāng)前切片的下一個(gè)輸出的切片作為當(dāng)前切片,返回步驟BI,否則,執(zhí)行步驟B3;
[0052]B3:將當(dāng)如切片的起點(diǎn)拼接到接收到的上個(gè)切片的終點(diǎn)之后;
[0053]B4:判斷當(dāng)前切片是否是當(dāng)前數(shù)據(jù)文件的最后一個(gè)切片,如果是,則獲得當(dāng)前數(shù)據(jù)文件,否則,將所述消息隊(duì)列中當(dāng)前切片的下一個(gè)待輸出的切片作為當(dāng)前切片,返回步驟Bl0
[0054]進(jìn)一步地,所述分割單元,還用于按照分割出的切片的時(shí)間順序,為每個(gè)切片分配順