專利名稱:一種消息發(fā)送和讀取方法、裝置及中間件系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種消息發(fā)送和讀取方法、裝置及中間件系統(tǒng)。
背景技術(shù):
在分布式計(jì)算環(huán)境中,為了集成分布式應(yīng)用,開發(fā)者需要對(duì)異構(gòu)網(wǎng)絡(luò)環(huán)境下的分布式應(yīng)用服務(wù)提供有效的通信手段,使得不同分布式應(yīng)用服務(wù)能夠互聯(lián)互通。消息隊(duì)列 (Message Queue)技術(shù)是分布式應(yīng)用服務(wù)間交換信息的有效技術(shù)。消息隊(duì)列可駐留在內(nèi)存或磁盤上,通信雙方通過(guò)標(biāo)準(zhǔn)的接口將消息放入消息隊(duì)列或從消息隊(duì)列讀取消息。目前,消息的發(fā)送使用定長(zhǎng)文本文字進(jìn)行,無(wú)法對(duì)不同類型的數(shù)據(jù)進(jìn)行有效的描述,當(dāng)消息中包含的數(shù)據(jù)文件的字段長(zhǎng)度、字段類型發(fā)生變化時(shí),需要修改關(guān)聯(lián)的應(yīng)用程序,使得應(yīng)用程序的可擴(kuò)展性差,應(yīng)用程序間的互操作性差。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目的在于提供一種消息發(fā)送和讀取方法、裝置和中間件系統(tǒng),旨在解決由于消息的發(fā)送使用定長(zhǎng)文本文字進(jìn)行,導(dǎo)致無(wú)法對(duì)不同類型的數(shù)據(jù)進(jìn)行有效的描述,當(dāng)消息中包含的數(shù)據(jù)文件的字段長(zhǎng)度、字段類型發(fā)生變化時(shí),需要修改關(guān)聯(lián)的應(yīng)用程序,使得應(yīng)用程序的可擴(kuò)展性差,應(yīng)用程序間的互操作性差的問(wèn)題。本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種消息發(fā)送方法,所述方法包括下述步驟根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割;根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息;將所述消息發(fā)送到消息隊(duì)列。本發(fā)明實(shí)施例的另一目的在于提供一種消息發(fā)送裝置,所述裝置包括文件分割單元,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割;消息生成單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息;以及消息發(fā)送單元,用于將所述消息生成單元生成的消息發(fā)送到消息隊(duì)列。本發(fā)明實(shí)施例的另一目的在于提供一種消息讀取方法,所述方法包括下述步驟從消息隊(duì)列中讀取指定的消息;根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息;輸出從所述消息中解析得到的數(shù)據(jù)文件。本發(fā)明實(shí)施例的另一目的在于提供一種消息讀取裝置,所述裝置包括消息讀取單元,用于從消息隊(duì)列中讀取指定的消息;消息解析單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息;以及數(shù)據(jù)文件輸出單元,用于輸出從所述消息中解析得到的數(shù)據(jù)文件。
本發(fā)明實(shí)施例的另一目的在于提供一種消息隊(duì)列通信方法,所述方法包括下述步驟消息發(fā)送裝置根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割;消息發(fā)送裝置根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息,將所述消息發(fā)送到消息隊(duì)列;消息讀取裝置從消息隊(duì)列中讀取指定的消息;消息讀取裝置根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息,輸出從所述消息中解析得到的數(shù)據(jù)文件。本發(fā)明實(shí)施例的另一目的在于提供一種中間件系統(tǒng),所述系統(tǒng)包括消息發(fā)送裝置以及消息讀取裝置,其中消息發(fā)送裝置,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割, 根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息,將所述消息發(fā)送到消息隊(duì)列;以及消息讀取裝置,用于從消息隊(duì)列中讀取指定的消息,根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息,輸出從所述消息中解析得到的數(shù)據(jù)文件。本發(fā)明實(shí)施例根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)待發(fā)送數(shù)據(jù)文件進(jìn)行分割并封裝,生成包含分割后的數(shù)據(jù)文件的消息,并發(fā)送到消息隊(duì)列,消息接收裝置從消息隊(duì)列中讀取指定的消息,根據(jù)數(shù)據(jù)封裝方式解析出讀取的消息,從而實(shí)現(xiàn)利用數(shù)據(jù)封裝方式動(dòng)態(tài)指定消息中數(shù)據(jù)文件內(nèi)容的封裝方式,克服了消息通信過(guò)程中使用定長(zhǎng)文本文字,無(wú)法對(duì)不同類型的數(shù)據(jù)進(jìn)行有效的描述,當(dāng)消息中包含的數(shù)據(jù)文件的字段長(zhǎng)度、字段類型發(fā)生變化時(shí),需要修改關(guān)聯(lián)的應(yīng)用程序,導(dǎo)致應(yīng)用程序的可擴(kuò)展性差,應(yīng)用程序間的互操作性差的問(wèn)題,為分布式環(huán)境下不同應(yīng)用程序提供了一種有效的通信方法,使得應(yīng)用程序的可擴(kuò)展性更強(qiáng),應(yīng)用程序間的互操作性更好。
圖1是本發(fā)明第一實(shí)施例提供的消息隊(duì)列通信方法的交互流程圖;圖2是本發(fā)明第三實(shí)施例提供的消息發(fā)送裝置的結(jié)構(gòu)圖;圖3是本發(fā)明第三實(shí)施例提供的消息讀取裝置的結(jié)構(gòu)圖;圖4是本發(fā)明第四實(shí)施例提供的中間件系統(tǒng)的結(jié)構(gòu)圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明實(shí)施例通過(guò)預(yù)設(shè)待發(fā)送數(shù)據(jù)文件的數(shù)據(jù)封裝方式對(duì)待發(fā)送的數(shù)據(jù)文件進(jìn)行分割并封裝,生成包含分割后的數(shù)據(jù)文件的消息,并發(fā)送到消息隊(duì)列,消息接收裝置從消息隊(duì)列中讀取指定的消息,根據(jù)數(shù)據(jù)封裝方式解析出讀取的消息,從而實(shí)現(xiàn)動(dòng)態(tài)配置消息通信中數(shù)據(jù)文件的封裝方式,為分布式環(huán)境下不同應(yīng)用程序提供了一種有效的通信方法, 使得應(yīng)用程序的可擴(kuò)展性更強(qiáng),應(yīng)用程序間的互操作性更好。
本發(fā)明實(shí)施例提供了一種消息發(fā)送方法,所述方法包括下述步驟根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割;根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息;將所述消息發(fā)送到消息隊(duì)列。本發(fā)明實(shí)施例還提供了一種消息發(fā)送裝置,所述裝置包括文件分割單元,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割;消息生成單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息;以及消息發(fā)送單元,用于將所述消息生成單元生成的消息發(fā)送到消息隊(duì)列。本發(fā)明實(shí)施例還提供了一種消息讀取方法,所述方法包括下述步驟從消息隊(duì)列中讀取指定的消息;根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息;輸出從所述消息中解析得到的數(shù)據(jù)文件。本發(fā)明實(shí)施例還提供了一種消息讀取裝置,所述裝置包括消息讀取單元,用于從消息隊(duì)列中讀取指定的消息;消息解析單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息;以及數(shù)據(jù)文件輸出單元,用于輸出從所述消息中解析得到的數(shù)據(jù)文件。 本發(fā)明實(shí)施例還提供了一種消息隊(duì)列通信方法,所述方法包括下述步驟消息發(fā)送裝置根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割;消息發(fā)送裝置根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息,將所述消息發(fā)送到消息隊(duì)列;消息讀取裝置從消息隊(duì)列中讀取指定的消息;消息讀取裝置根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息,輸出從所述消息中解析得到的數(shù)據(jù)文件。本發(fā)明實(shí)施例還提供了一種中間件系統(tǒng),所述系統(tǒng)包括消息發(fā)送裝置以及消息讀取裝置,其中消息發(fā)送裝置,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割, 根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息,將所述消息發(fā)送到消息隊(duì)列;以及消息讀取裝置,用于從消息隊(duì)列中讀取指定的消息,根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息,輸出從所述消息中解析得到的數(shù)據(jù)文件。本發(fā)明實(shí)施例通過(guò)預(yù)先設(shè)置待發(fā)送數(shù)據(jù)文件的數(shù)據(jù)封裝方式,根據(jù)數(shù)據(jù)封裝方式對(duì)需要發(fā)送的數(shù)據(jù)文件進(jìn)行分割并封裝,生成包含分割后的數(shù)據(jù)文件的消息,并發(fā)送到消息隊(duì)列,消息接收裝置從消息隊(duì)列中讀取指定的消息,根據(jù)數(shù)據(jù)封裝方式解析出讀取的消息,從而實(shí)現(xiàn)利用預(yù)設(shè)數(shù)據(jù)封裝方式動(dòng)態(tài)指定消息中數(shù)據(jù)文件的封裝方式,克服了消息通信過(guò)程中使用定長(zhǎng)文本文字,無(wú)法對(duì)不同類型的數(shù)據(jù)進(jìn)行有效的描述,當(dāng)消息中包含的數(shù)據(jù)文件的字段長(zhǎng)度、字段類型發(fā)生變化時(shí),需要修改關(guān)聯(lián)的應(yīng)用程序,導(dǎo)致應(yīng)用程序的可擴(kuò)展性差,應(yīng)用程序間的互操作性差的問(wèn)題,為分布式環(huán)境下不同應(yīng)用程序提供了一種有效的通信方法,使得應(yīng)用程序的可擴(kuò)展性更強(qiáng),應(yīng)用程序間的互操作性更好。以下結(jié)合具體實(shí)施例對(duì)本發(fā)明的具體實(shí)現(xiàn)進(jìn)行詳細(xì)描述實(shí)施例一圖1示出了本發(fā)明第一實(shí)施例提供的消息隊(duì)列通信方法的交互流程,詳述如下1.消息發(fā)送裝置根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割。在本發(fā)明實(shí)施例中,消息隊(duì)列中可存儲(chǔ)的消息的長(zhǎng)度是預(yù)先設(shè)定的,消息中包含一個(gè)消息頭和等發(fā)送的數(shù)據(jù)兩個(gè)部分,當(dāng)應(yīng)用程序間、進(jìn)程間需要通過(guò)消息隊(duì)列進(jìn)行通信時(shí),應(yīng)對(duì)超過(guò)規(guī)定的消息長(zhǎng)度的數(shù)據(jù)文件進(jìn)行分割,將待發(fā)送的數(shù)據(jù)文件分割為適合消息發(fā)送的數(shù)據(jù)塊,分割的方法有多種,可以將要發(fā)送的數(shù)據(jù)分割為長(zhǎng)度相等,且少于消息可發(fā)送的數(shù)據(jù)長(zhǎng)度的數(shù)據(jù)塊,或按消息可發(fā)送的數(shù)據(jù)長(zhǎng)度進(jìn)行分割,從而在消息中存放盡量多的數(shù)據(jù),在此不再贅述,但不用以限制本發(fā)明。作為本發(fā)明的最優(yōu)實(shí)施例,在考慮到存儲(chǔ)盡量多的數(shù)據(jù)的同時(shí),應(yīng)考慮每次消息中發(fā)送的數(shù)據(jù)的完整性,即為一個(gè)完整的數(shù)據(jù)記錄,因此,可以在該步驟之前,根據(jù)輸入的數(shù)據(jù)文件的數(shù)據(jù)記錄單位,設(shè)置消息中封裝的數(shù)據(jù)文件的長(zhǎng)度,例如,當(dāng)輸入的數(shù)據(jù)文件為一個(gè)數(shù)據(jù)表時(shí),可以將消息中封裝的數(shù)據(jù)文件長(zhǎng)度設(shè)置不大于消息長(zhǎng)度,且為表的行記錄長(zhǎng)度的最大整數(shù)倍,從而方便數(shù)據(jù)文件的分割。2.消息發(fā)送裝置根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成分割后的數(shù)據(jù)文件的消息。在本發(fā)明實(shí)施例中,預(yù)設(shè)的數(shù)據(jù)封裝方式包括數(shù)據(jù)文件組成字段封裝到消息中時(shí),該字段的精度、數(shù)據(jù)表示格式等信息,在對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝時(shí),根據(jù)數(shù)據(jù)封裝方式中對(duì)數(shù)據(jù)文件各個(gè)字段的封裝方式,對(duì)相應(yīng)的字段進(jìn)行處理,例如,對(duì)于數(shù)據(jù)文件中空字段,對(duì)其補(bǔ)充相同數(shù)目的空格,對(duì)于大于規(guī)定的數(shù)據(jù)精度的字段,進(jìn)行四舍五入保留該精度。對(duì)分割好的數(shù)據(jù)文件的封裝可以同時(shí)進(jìn)行,也可以按照一定的順序進(jìn)行封裝。在具體的實(shí)施過(guò)程中,數(shù)據(jù)封裝方式的設(shè)置可以根據(jù)消息隊(duì)列進(jìn)行設(shè)置,即一個(gè)消息隊(duì)列設(shè)置關(guān)聯(lián)的數(shù)據(jù)封裝方式,也可以根據(jù)輸入的數(shù)據(jù)文件設(shè)置關(guān)聯(lián)的數(shù)據(jù)封裝方式,從而可以通過(guò)設(shè)置不同的數(shù)據(jù)封裝方式,實(shí)現(xiàn)同一個(gè)消息隊(duì)列發(fā)送不同數(shù)據(jù)類型的數(shù)據(jù)文件,提高應(yīng)用程序的可用性和應(yīng)用程序間的互操作性。3.消息發(fā)送裝置將封裝好的消息發(fā)送到消息隊(duì)列。在本發(fā)明實(shí)施例中,消息發(fā)送裝置將封裝好的消息發(fā)送到消息隊(duì)列時(shí)可以采取異步的方式進(jìn)行發(fā)送,不需要等消息讀取裝置將消息隊(duì)列中的前一消息取走后再發(fā)送。4.消息讀取裝置從消息隊(duì)列中讀取指定的消息。在本發(fā)明實(shí)施例中,消息隊(duì)列分為共用消息隊(duì)列和專用消息隊(duì)列,共用消息隊(duì)列中消息沒(méi)有嚴(yán)格的權(quán)限控制,相關(guān)的應(yīng)用程序都可以訪問(wèn),而專用消息隊(duì)列只有具有一定權(quán)限的應(yīng)用程序才可以讀取,在具體的實(shí)施過(guò)程中,消息讀取裝置可以根據(jù)預(yù)設(shè)的頻率從消息隊(duì)列中讀取指定的消息,也可以根據(jù)應(yīng)用程序運(yùn)行的需要讀取需要的消息,具體地,可以指定消息頭中的消息標(biāo)識(shí)號(hào)來(lái)指定讀取的消息。5.消息讀取裝置根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析讀取的消息;在本發(fā)明實(shí)施例中,預(yù)設(shè)的數(shù)據(jù)封裝方式包括數(shù)據(jù)文件組成字段封裝到消息中時(shí),該字段的精度、數(shù)據(jù)表示格式等信息,在消息進(jìn)行解析時(shí),根據(jù)數(shù)據(jù)封裝方式中對(duì)數(shù)據(jù)文件各個(gè)字段的封裝方式,對(duì)相應(yīng)的字段進(jìn)行處理,例如,對(duì)于數(shù)據(jù)文件中空字段,對(duì)其補(bǔ)充相同數(shù)目的空格,對(duì)于小于規(guī)定的數(shù)據(jù)精度的字段,在數(shù)據(jù)前面補(bǔ)0。在本發(fā)明實(shí)施例中,該數(shù)據(jù)封裝方式應(yīng)與消息發(fā)送裝置的數(shù)據(jù)封裝方式同步,以保持對(duì)讀取的消息的正確解析。6.輸出從消息中解析得到的數(shù)據(jù)文件。在本發(fā)明實(shí)施例中,解析出來(lái)的數(shù)據(jù)文件可能是某個(gè)數(shù)據(jù)文件其中的一部分,應(yīng)與其它消息中解析出來(lái)的數(shù)據(jù)文件進(jìn)行重排、合并等操作,從而獲得從消息發(fā)送裝置發(fā)送的整個(gè)數(shù)據(jù)文件。本發(fā)明實(shí)施例通過(guò)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)輸入的數(shù)據(jù)文件進(jìn)行封裝,通過(guò)異步的方式發(fā)送到消息隊(duì)列,消息接收裝置根據(jù)數(shù)據(jù)封裝方式對(duì)從消息隊(duì)列中讀取的消息進(jìn)行解析,從而可以通過(guò)設(shè)置不同的數(shù)據(jù)封裝方式,實(shí)現(xiàn)同一個(gè)消息隊(duì)列發(fā)送不同數(shù)據(jù)類型的數(shù)據(jù)文件,提高應(yīng)用程序的可用性和應(yīng)用程序間的互操作性。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中, 所述的存儲(chǔ)介質(zhì),如ROM/RAM、磁盤、光盤等。實(shí)施例二 圖2示出了本發(fā)明第二實(shí)施例提供的消息發(fā)送裝置的結(jié)構(gòu),為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。文件長(zhǎng)度設(shè)置單元21,用于根據(jù)預(yù)設(shè)的消息長(zhǎng)度以及輸入的數(shù)據(jù)文件的數(shù)據(jù)記錄單位,設(shè)置消息中封裝的數(shù)據(jù)文件長(zhǎng)度。在本發(fā)明實(shí)施例中,為了方便對(duì)輸入的數(shù)據(jù)文件的分割,首先根據(jù)輸入的數(shù)據(jù)文件的數(shù)據(jù)記錄單位,設(shè)置消息中封裝的數(shù)據(jù)文件的長(zhǎng)度,例如,當(dāng)輸入的數(shù)據(jù)文件為一個(gè)數(shù)據(jù)表時(shí),可以將消息中封裝的數(shù)據(jù)文件長(zhǎng)度設(shè)置不大于消息長(zhǎng)度,且為表的行記錄長(zhǎng)度的最大整數(shù)倍,從而保證分割的數(shù)據(jù)文件為一個(gè)完整的、有意義的數(shù)據(jù)文件。文件分割單元22,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割。在本發(fā)明實(shí)施例中,消息隊(duì)列中可存儲(chǔ)的消息的長(zhǎng)度是預(yù)先設(shè)定的,從而確定消息隊(duì)列的消息中可封裝的數(shù)據(jù)文件長(zhǎng)度,當(dāng)發(fā)送的數(shù)據(jù)文件長(zhǎng)度大于消息可發(fā)送的文件長(zhǎng)度時(shí),必須對(duì)發(fā)送的數(shù)據(jù)文件進(jìn)行分割,分割為適合消息發(fā)送的數(shù)據(jù)塊。消息生成單元23,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝, 生成包含分割后的數(shù)據(jù)文件的消息。在本發(fā)明實(shí)施例中,預(yù)設(shè)的數(shù)據(jù)封裝方式包括數(shù)據(jù)文件組成字段封裝到消息中時(shí),該字段的精度、數(shù)據(jù)表示格式等信息,在對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝時(shí),根據(jù)數(shù)據(jù)封裝方式中對(duì)數(shù)據(jù)文件各個(gè)字段的封裝方式,對(duì)相應(yīng)的字段進(jìn)行處理,例如,對(duì)于數(shù)據(jù)文件中空字段,對(duì)其補(bǔ)充相同數(shù)目的空格,對(duì)于大于規(guī)定的數(shù)據(jù)精度的字段,進(jìn)行四舍五入保留該精度。對(duì)分割好的數(shù)據(jù)文件的封裝可以同時(shí)進(jìn)行,也可以按照一定的順序進(jìn)行封裝。在具體的實(shí)施過(guò)程中,數(shù)據(jù)封裝方式的設(shè)置可以根據(jù)消息隊(duì)列進(jìn)行設(shè)置,即一個(gè)消息隊(duì)列設(shè)置關(guān)聯(lián)的數(shù)據(jù)封裝方式,也可以根據(jù)輸入的數(shù)據(jù)文件設(shè)置關(guān)聯(lián)的數(shù)據(jù)封裝方式,從而可以通過(guò)設(shè)置不同的數(shù)據(jù)封裝方式,實(shí)現(xiàn)同一個(gè)消息隊(duì)列發(fā)送不同數(shù)據(jù)類型的數(shù)據(jù)文件,提高應(yīng)用程序的可用性和應(yīng)用程序間的互操作性。消息發(fā)送單元24,用于將消息生成單元22生成的消息發(fā)送到消息隊(duì)列。在本發(fā)明實(shí)施例中,消息發(fā)送裝置將封裝好的消息發(fā)送到消息隊(duì)列時(shí)可以采取異步的方式進(jìn)行發(fā)送,不需要等消息讀取裝置將消息隊(duì)列中的前一消息取走后再發(fā)送。在本發(fā)明實(shí)施例中,該消息發(fā)送裝置可以用于中間件系統(tǒng),或者用于不同應(yīng)用程序間的互操作系統(tǒng),可以是運(yùn)行于這些系統(tǒng)的軟件單元、硬件單元或軟硬件結(jié)合單元,也可以作為獨(dú)立的掛件集成到這些系統(tǒng)中。實(shí)施例三圖3示出了本發(fā)明第三實(shí)施例提供的消息讀取裝置的結(jié)構(gòu),為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。消息讀取單元31,用于從消息隊(duì)列中讀取指定的消息。在本發(fā)明實(shí)施例中,消息隊(duì)列分為共用消息隊(duì)列和專用消息隊(duì)列,共用消息隊(duì)列中消息沒(méi)有嚴(yán)格的權(quán)限控制,相關(guān)的應(yīng)用程序都可以訪問(wèn),而專用消息隊(duì)列只有具有一定權(quán)限的應(yīng)用程序才可以讀取,在具體的實(shí)施過(guò)程中,消息讀取裝置可以按照一定頻率到消息隊(duì)列中讀取消息,也可以根據(jù)應(yīng)用程序運(yùn)行的需要讀取需要的消息。消息解析單元32,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析消息讀取單元31讀取的消肩、ο在本發(fā)明實(shí)施例中,預(yù)設(shè)的數(shù)據(jù)封裝方式包括數(shù)據(jù)文件組成字段封裝到消息中時(shí),該字段的精度、數(shù)據(jù)表示格式等信息,在消息進(jìn)行解析時(shí),根據(jù)數(shù)據(jù)封裝方式中對(duì)數(shù)據(jù)文件各個(gè)字段的封裝方式,對(duì)相應(yīng)的字段進(jìn)行處理,例如,對(duì)于數(shù)據(jù)文件中空字段,對(duì)其補(bǔ)充相同數(shù)目的空格,對(duì)于小于規(guī)定的數(shù)據(jù)精度的字段,在數(shù)據(jù)前面補(bǔ)0。在本發(fā)明實(shí)施例中,該數(shù)據(jù)封裝方式應(yīng)與消息發(fā)送裝置的數(shù)據(jù)封裝方式同步,以保持對(duì)讀取的消息的正確解析。數(shù)據(jù)文件輸出單元33,用于輸出從消息中解析得到的數(shù)據(jù)文件。在本發(fā)明實(shí)施例中,解析出來(lái)的數(shù)據(jù)文件可能是某個(gè)數(shù)據(jù)文件其中的一部分,應(yīng)與其它消息中解析出來(lái)的數(shù)據(jù)文件進(jìn)行重排、合并等操作,從而獲得從消息發(fā)送裝置發(fā)送的整個(gè)數(shù)據(jù)文件。在本發(fā)明實(shí)施例中,該消息讀取裝置可以用于中間件系統(tǒng),或者用于不同應(yīng)用程序間的互操作系統(tǒng),可以是運(yùn)行于這些系統(tǒng)的軟件單元、硬件單元或軟硬件結(jié)合單元,也可以作為獨(dú)立的掛件集成到這些系統(tǒng)中。實(shí)施例四圖4示出了本發(fā)明第三實(shí)施例提供的中間件系統(tǒng)的結(jié)構(gòu),為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。在本發(fā)明實(shí)施例中,應(yīng)用程序41和應(yīng)用程序43通過(guò)中間件系統(tǒng)42進(jìn)行通信,完成數(shù)據(jù)的共享和交換,其中中間件系統(tǒng)42包括消息發(fā)送裝置421、消息隊(duì)列422、消息讀取裝置423,其中消息發(fā)送裝置421,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分害!],根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息,將消息發(fā)送到消息隊(duì)列。
9
在本發(fā)明實(shí)施例中,消息發(fā)送裝置421向外提供相應(yīng)的調(diào)用接口,接收應(yīng)用程序輸入的數(shù)據(jù)文件,該調(diào)用接口可以是EJB接口、Web服務(wù)接口等遠(yuǎn)程調(diào)用接口。消息隊(duì)列422,用于存儲(chǔ)消息發(fā)送裝置421發(fā)送過(guò)來(lái)的消息。在本發(fā)明實(shí)施例中,消息隊(duì)列中可存儲(chǔ)的消息的長(zhǎng)度是預(yù)先設(shè)定的,在預(yù)設(shè)的長(zhǎng)度下,應(yīng)盡量使消息中封裝更多的數(shù)據(jù)信息。消息讀取裝置423,用于從消息隊(duì)列中讀取指定的消息,根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析讀取到的消息,輸出從消息中解析得到的數(shù)據(jù)文件。在本發(fā)明實(shí)施例中,消息讀取裝置423向外提供相應(yīng)的調(diào)用接口,接收應(yīng)用程序輸入的讀取數(shù)據(jù)請(qǐng)求,從消息隊(duì)列中讀取數(shù)據(jù),該調(diào)用接口可以是EJB接口、Web服務(wù)接口等遠(yuǎn)程調(diào)用接口。在本發(fā)明實(shí)施例中,數(shù)據(jù)封裝方式的設(shè)置可以根據(jù)消息隊(duì)列進(jìn)行設(shè)置,即一個(gè)消息隊(duì)列設(shè)置關(guān)聯(lián)的數(shù)據(jù)封裝方式,也可以根據(jù)輸入的數(shù)據(jù)文件設(shè)置關(guān)聯(lián)的數(shù)據(jù)封裝方式, 從而可以通過(guò)設(shè)置不同的數(shù)據(jù)封裝方式,實(shí)現(xiàn)同一個(gè)消息隊(duì)列發(fā)送不同數(shù)據(jù)類型的數(shù)據(jù)文件,提高應(yīng)用程序的可用性和應(yīng)用程序間的互操作性。在本發(fā)明實(shí)施例中,中間件系統(tǒng)通過(guò)消息發(fā)送裝置、消息讀取裝置向應(yīng)用程序提供相應(yīng)的數(shù)據(jù)發(fā)送、讀取接口,在消息發(fā)送裝置中對(duì)應(yīng)用程序輸入的數(shù)據(jù)文件進(jìn)行分割并封裝,生成包含分割后的數(shù)據(jù)文件的消息,并發(fā)送到消息隊(duì)列,在消息讀取裝置中根據(jù)數(shù)據(jù)封裝方式對(duì)從消息隊(duì)列中讀取的消息進(jìn)行解析,發(fā)送給請(qǐng)求數(shù)據(jù)的應(yīng)用程序,實(shí)現(xiàn)了分布式環(huán)境下不同應(yīng)用程序間的共享資源。本發(fā)明實(shí)施例通過(guò)根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割并封裝, 生成包含分割后的數(shù)據(jù)文件的消息,并發(fā)送到消息隊(duì)列,消息接收裝置從消息隊(duì)列中讀取指定的消息,根據(jù)數(shù)據(jù)封裝方式解析出讀取的消息,克服了消息通信過(guò)程中使用定長(zhǎng)文本文字,無(wú)法對(duì)不同類型的數(shù)據(jù)進(jìn)行有效的描述,當(dāng)消息中包含的數(shù)據(jù)文件字段長(zhǎng)度、字段類型發(fā)生變化時(shí),需要修改關(guān)聯(lián)的應(yīng)用程序,導(dǎo)致應(yīng)用程序的可擴(kuò)展性差,應(yīng)用程序間的互操作性差的問(wèn)題,為分布式環(huán)境下不同應(yīng)用程序提供了一種有效的通信方法,使得應(yīng)用程序的可擴(kuò)展性更強(qiáng),應(yīng)用程序間的互操作性更好。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種消息發(fā)送方法,其特征在于,所述方法包括下述步驟 根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割;根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息;將所述消息發(fā)送到消息隊(duì)列。
2.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割的步驟之前,所述方法進(jìn)一步包括下述步驟根據(jù)預(yù)設(shè)的消息長(zhǎng)度以及輸入的數(shù)據(jù)文件的數(shù)據(jù)記錄單位,設(shè)置消息中封裝的數(shù)據(jù)文件長(zhǎng)度。
3.一種消息發(fā)送裝置,其特征在于,所述裝置包括文件分割單元,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割; 消息生成單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息;以及消息發(fā)送單元,用于將所述消息生成單元生成的消息發(fā)送到消息隊(duì)列。
4.如權(quán)利要求3所述的裝置,其特征在于,所述裝置還包括文件長(zhǎng)度設(shè)置單元,用于根據(jù)預(yù)設(shè)的消息長(zhǎng)度以及輸入的數(shù)據(jù)文件的數(shù)據(jù)記錄單位, 設(shè)置消息中封裝的數(shù)據(jù)文件長(zhǎng)度。
5.一種消息讀取方法,其特征在于,所述方法包括下述步驟 從消息隊(duì)列中讀取指定的消息;根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息; 輸出從所述消息中解析得到的數(shù)據(jù)文件。
6.一種消息讀取裝置,其特征在于,所述裝置包括 消息讀取單元,用于從消息隊(duì)列中讀取指定的消息;消息解析單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息;以及數(shù)據(jù)文件輸出單元,用于輸出從所述消息中解析得到的數(shù)據(jù)文件。
7.一種消息隊(duì)列通信方法,其特征在于,所述方法包括下述步驟消息發(fā)送裝置根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割; 消息發(fā)送裝置根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息,將所述消息發(fā)送到消息隊(duì)列; 消息讀取裝置從消息隊(duì)列中讀取指定的消息;消息讀取裝置根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息,輸出從所述消息中解析得到的數(shù)據(jù)文件。
8.—種中間件系統(tǒng),其特征在于,所述系統(tǒng)包括消息發(fā)送裝置以及消息讀取裝置,其中消息發(fā)送裝置,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割,根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息, 將所述消息發(fā)送到消息隊(duì)列;以及消息讀取裝置,用于從消息隊(duì)列中讀取指定的消息,根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息,輸出從所述消息中解析得到的數(shù)據(jù)文件。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述消息發(fā)送裝置包括文件分割單元,用于根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割; 消息生成單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息;以及消息發(fā)送單元,用于將所述消息生成單元生成的消息發(fā)送到消息隊(duì)列。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述消息讀取裝置包括 消息讀取單元,用于從消息隊(duì)列中讀取指定的消息;消息解析單元,用于根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式解析所述消息;以及數(shù)據(jù)文件輸出單元,用于輸出從所述消息中解析得到的數(shù)據(jù)文件。
全文摘要
本發(fā)明適用于計(jì)算機(jī)技術(shù)領(lǐng)域,提供了一種消息發(fā)送和讀取方法、裝置及中間件系統(tǒng),所述方法包括下述步驟根據(jù)預(yù)先設(shè)置的數(shù)據(jù)文件長(zhǎng)度對(duì)輸入的數(shù)據(jù)文件進(jìn)行分割;根據(jù)預(yù)設(shè)的數(shù)據(jù)封裝方式對(duì)分割后的數(shù)據(jù)文件進(jìn)行封裝,生成包含分割后的數(shù)據(jù)文件的消息;將所述消息發(fā)送到消息隊(duì)列。本發(fā)明通過(guò)預(yù)設(shè)待發(fā)送數(shù)據(jù)的封裝方式,對(duì)待發(fā)送的數(shù)據(jù)文件進(jìn)行分割并封裝,生成包含分割后的數(shù)據(jù)文件的消息,從而實(shí)現(xiàn)動(dòng)態(tài)設(shè)置待發(fā)送消息中數(shù)據(jù)文件的封裝方式,為分布式環(huán)境下不同應(yīng)用程序提供了一種有效的通信方法,使得應(yīng)用程序的可擴(kuò)展性更強(qiáng),應(yīng)用程序間的互操作性更好。
文檔編號(hào)H04L12/58GK102457442SQ201010525410
公開日2012年5月16日 申請(qǐng)日期2010年10月29日 優(yōu)先權(quán)日2010年10月29日
發(fā)明者黎亮 申請(qǐng)人:金蝶軟件(中國(guó))有限公司