专利名称:一种消息发送和读取方法、装置及中间件系统的制作方法
技术领域:
本发明属于计算机技术领域,尤其涉及一种消息发送和读取方法、装置及中间件系统。
背景技术:
在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用服务提供有效的通信手段,使得不同分布式应用服务能够互联互通。消息队列 (Message Queue)技术是分布式应用服务间交换信息的有效技术。消息队列可驻留在内存或磁盘上,通信双方通过标准的接口将消息放入消息队列或从消息队列读取消息。目前,消息的发送使用定长文本文字进行,无法对不同类型的数据进行有效的描述,当消息中包含的数据文件的字段长度、字段类型发生变化时,需要修改关联的应用程序,使得应用程序的可扩展性差,应用程序间的互操作性差。
发明内容
本发明实施例的目的在于提供一种消息发送和读取方法、装置和中间件系统,旨在解决由于消息的发送使用定长文本文字进行,导致无法对不同类型的数据进行有效的描述,当消息中包含的数据文件的字段长度、字段类型发生变化时,需要修改关联的应用程序,使得应用程序的可扩展性差,应用程序间的互操作性差的问题。本发明实施例是这样实现的,一种消息发送方法,所述方法包括下述步骤根据预先设置的数据文件长度对输入的数据文件进行分割;根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息;将所述消息发送到消息队列。本发明实施例的另一目的在于提供一种消息发送装置,所述装置包括文件分割单元,用于根据预先设置的数据文件长度对输入的数据文件进行分割;消息生成单元,用于根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息;以及消息发送单元,用于将所述消息生成单元生成的消息发送到消息队列。本发明实施例的另一目的在于提供一种消息读取方法,所述方法包括下述步骤从消息队列中读取指定的消息;根据预设的数据封装方式解析所述消息;输出从所述消息中解析得到的数据文件。本发明实施例的另一目的在于提供一种消息读取装置,所述装置包括消息读取单元,用于从消息队列中读取指定的消息;消息解析单元,用于根据预设的数据封装方式解析所述消息;以及数据文件输出单元,用于输出从所述消息中解析得到的数据文件。
本发明实施例的另一目的在于提供一种消息队列通信方法,所述方法包括下述步骤消息发送装置根据预先设置的数据文件长度对输入的数据文件进行分割;消息发送装置根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息,将所述消息发送到消息队列;消息读取装置从消息队列中读取指定的消息;消息读取装置根据预设的数据封装方式解析所述消息,输出从所述消息中解析得到的数据文件。本发明实施例的另一目的在于提供一种中间件系统,所述系统包括消息发送装置以及消息读取装置,其中消息发送装置,用于根据预先设置的数据文件长度对输入的数据文件进行分割, 根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息,将所述消息发送到消息队列;以及消息读取装置,用于从消息队列中读取指定的消息,根据预设的数据封装方式解析所述消息,输出从所述消息中解析得到的数据文件。本发明实施例根据预设的数据封装方式对待发送数据文件进行分割并封装,生成包含分割后的数据文件的消息,并发送到消息队列,消息接收装置从消息队列中读取指定的消息,根据数据封装方式解析出读取的消息,从而实现利用数据封装方式动态指定消息中数据文件内容的封装方式,克服了消息通信过程中使用定长文本文字,无法对不同类型的数据进行有效的描述,当消息中包含的数据文件的字段长度、字段类型发生变化时,需要修改关联的应用程序,导致应用程序的可扩展性差,应用程序间的互操作性差的问题,为分布式环境下不同应用程序提供了一种有效的通信方法,使得应用程序的可扩展性更强,应用程序间的互操作性更好。
图1是本发明第一实施例提供的消息队列通信方法的交互流程图;图2是本发明第三实施例提供的消息发送装置的结构图;图3是本发明第三实施例提供的消息读取装置的结构图;图4是本发明第四实施例提供的中间件系统的结构图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明实施例通过预设待发送数据文件的数据封装方式对待发送的数据文件进行分割并封装,生成包含分割后的数据文件的消息,并发送到消息队列,消息接收装置从消息队列中读取指定的消息,根据数据封装方式解析出读取的消息,从而实现动态配置消息通信中数据文件的封装方式,为分布式环境下不同应用程序提供了一种有效的通信方法, 使得应用程序的可扩展性更强,应用程序间的互操作性更好。
本发明实施例提供了一种消息发送方法,所述方法包括下述步骤根据预先设置的数据文件长度对输入的数据文件进行分割;根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息;将所述消息发送到消息队列。本发明实施例还提供了一种消息发送装置,所述装置包括文件分割单元,用于根据预先设置的数据文件长度对输入的数据文件进行分割;消息生成单元,用于根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息;以及消息发送单元,用于将所述消息生成单元生成的消息发送到消息队列。本发明实施例还提供了一种消息读取方法,所述方法包括下述步骤从消息队列中读取指定的消息;根据预设的数据封装方式解析所述消息;输出从所述消息中解析得到的数据文件。本发明实施例还提供了一种消息读取装置,所述装置包括消息读取单元,用于从消息队列中读取指定的消息;消息解析单元,用于根据预设的数据封装方式解析所述消息;以及数据文件输出单元,用于输出从所述消息中解析得到的数据文件。 本发明实施例还提供了一种消息队列通信方法,所述方法包括下述步骤消息发送装置根据预先设置的数据文件长度对输入的数据文件进行分割;消息发送装置根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息,将所述消息发送到消息队列;消息读取装置从消息队列中读取指定的消息;消息读取装置根据预设的数据封装方式解析所述消息,输出从所述消息中解析得到的数据文件。本发明实施例还提供了一种中间件系统,所述系统包括消息发送装置以及消息读取装置,其中消息发送装置,用于根据预先设置的数据文件长度对输入的数据文件进行分割, 根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息,将所述消息发送到消息队列;以及消息读取装置,用于从消息队列中读取指定的消息,根据预设的数据封装方式解析所述消息,输出从所述消息中解析得到的数据文件。本发明实施例通过预先设置待发送数据文件的数据封装方式,根据数据封装方式对需要发送的数据文件进行分割并封装,生成包含分割后的数据文件的消息,并发送到消息队列,消息接收装置从消息队列中读取指定的消息,根据数据封装方式解析出读取的消息,从而实现利用预设数据封装方式动态指定消息中数据文件的封装方式,克服了消息通信过程中使用定长文本文字,无法对不同类型的数据进行有效的描述,当消息中包含的数据文件的字段长度、字段类型发生变化时,需要修改关联的应用程序,导致应用程序的可扩展性差,应用程序间的互操作性差的问题,为分布式环境下不同应用程序提供了一种有效的通信方法,使得应用程序的可扩展性更强,应用程序间的互操作性更好。以下结合具体实施例对本发明的具体实现进行详细描述实施例一图1示出了本发明第一实施例提供的消息队列通信方法的交互流程,详述如下1.消息发送装置根据预先设置的数据文件长度对输入的数据文件进行分割。在本发明实施例中,消息队列中可存储的消息的长度是预先设定的,消息中包含一个消息头和等发送的数据两个部分,当应用程序间、进程间需要通过消息队列进行通信时,应对超过规定的消息长度的数据文件进行分割,将待发送的数据文件分割为适合消息发送的数据块,分割的方法有多种,可以将要发送的数据分割为长度相等,且少于消息可发送的数据长度的数据块,或按消息可发送的数据长度进行分割,从而在消息中存放尽量多的数据,在此不再赘述,但不用以限制本发明。作为本发明的最优实施例,在考虑到存储尽量多的数据的同时,应考虑每次消息中发送的数据的完整性,即为一个完整的数据记录,因此,可以在该步骤之前,根据输入的数据文件的数据记录单位,设置消息中封装的数据文件的长度,例如,当输入的数据文件为一个数据表时,可以将消息中封装的数据文件长度设置不大于消息长度,且为表的行记录长度的最大整数倍,从而方便数据文件的分割。2.消息发送装置根据预设的数据封装方式对分割后的数据文件进行封装,生成分割后的数据文件的消息。在本发明实施例中,预设的数据封装方式包括数据文件组成字段封装到消息中时,该字段的精度、数据表示格式等信息,在对分割后的数据文件进行封装时,根据数据封装方式中对数据文件各个字段的封装方式,对相应的字段进行处理,例如,对于数据文件中空字段,对其补充相同数目的空格,对于大于规定的数据精度的字段,进行四舍五入保留该精度。对分割好的数据文件的封装可以同时进行,也可以按照一定的顺序进行封装。在具体的实施过程中,数据封装方式的设置可以根据消息队列进行设置,即一个消息队列设置关联的数据封装方式,也可以根据输入的数据文件设置关联的数据封装方式,从而可以通过设置不同的数据封装方式,实现同一个消息队列发送不同数据类型的数据文件,提高应用程序的可用性和应用程序间的互操作性。3.消息发送装置将封装好的消息发送到消息队列。在本发明实施例中,消息发送装置将封装好的消息发送到消息队列时可以采取异步的方式进行发送,不需要等消息读取装置将消息队列中的前一消息取走后再发送。4.消息读取装置从消息队列中读取指定的消息。在本发明实施例中,消息队列分为共用消息队列和专用消息队列,共用消息队列中消息没有严格的权限控制,相关的应用程序都可以访问,而专用消息队列只有具有一定权限的应用程序才可以读取,在具体的实施过程中,消息读取装置可以根据预设的频率从消息队列中读取指定的消息,也可以根据应用程序运行的需要读取需要的消息,具体地,可以指定消息头中的消息标识号来指定读取的消息。5.消息读取装置根据预设的数据封装方式解析读取的消息;在本发明实施例中,预设的数据封装方式包括数据文件组成字段封装到消息中时,该字段的精度、数据表示格式等信息,在消息进行解析时,根据数据封装方式中对数据文件各个字段的封装方式,对相应的字段进行处理,例如,对于数据文件中空字段,对其补充相同数目的空格,对于小于规定的数据精度的字段,在数据前面补0。在本发明实施例中,该数据封装方式应与消息发送装置的数据封装方式同步,以保持对读取的消息的正确解析。6.输出从消息中解析得到的数据文件。在本发明实施例中,解析出来的数据文件可能是某个数据文件其中的一部分,应与其它消息中解析出来的数据文件进行重排、合并等操作,从而获得从消息发送装置发送的整个数据文件。本发明实施例通过预设的数据封装方式对输入的数据文件进行封装,通过异步的方式发送到消息队列,消息接收装置根据数据封装方式对从消息队列中读取的消息进行解析,从而可以通过设置不同的数据封装方式,实现同一个消息队列发送不同数据类型的数据文件,提高应用程序的可用性和应用程序间的互操作性。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中, 所述的存储介质,如ROM/RAM、磁盘、光盘等。实施例二 图2示出了本发明第二实施例提供的消息发送装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分。文件长度设置单元21,用于根据预设的消息长度以及输入的数据文件的数据记录单位,设置消息中封装的数据文件长度。在本发明实施例中,为了方便对输入的数据文件的分割,首先根据输入的数据文件的数据记录单位,设置消息中封装的数据文件的长度,例如,当输入的数据文件为一个数据表时,可以将消息中封装的数据文件长度设置不大于消息长度,且为表的行记录长度的最大整数倍,从而保证分割的数据文件为一个完整的、有意义的数据文件。文件分割单元22,用于根据预先设置的数据文件长度对输入的数据文件进行分割。在本发明实施例中,消息队列中可存储的消息的长度是预先设定的,从而确定消息队列的消息中可封装的数据文件长度,当发送的数据文件长度大于消息可发送的文件长度时,必须对发送的数据文件进行分割,分割为适合消息发送的数据块。消息生成单元23,用于根据预设的数据封装方式对分割后的数据文件进行封装, 生成包含分割后的数据文件的消息。在本发明实施例中,预设的数据封装方式包括数据文件组成字段封装到消息中时,该字段的精度、数据表示格式等信息,在对分割后的数据文件进行封装时,根据数据封装方式中对数据文件各个字段的封装方式,对相应的字段进行处理,例如,对于数据文件中空字段,对其补充相同数目的空格,对于大于规定的数据精度的字段,进行四舍五入保留该精度。对分割好的数据文件的封装可以同时进行,也可以按照一定的顺序进行封装。在具体的实施过程中,数据封装方式的设置可以根据消息队列进行设置,即一个消息队列设置关联的数据封装方式,也可以根据输入的数据文件设置关联的数据封装方式,从而可以通过设置不同的数据封装方式,实现同一个消息队列发送不同数据类型的数据文件,提高应用程序的可用性和应用程序间的互操作性。消息发送单元24,用于将消息生成单元22生成的消息发送到消息队列。在本发明实施例中,消息发送装置将封装好的消息发送到消息队列时可以采取异步的方式进行发送,不需要等消息读取装置将消息队列中的前一消息取走后再发送。在本发明实施例中,该消息发送装置可以用于中间件系统,或者用于不同应用程序间的互操作系统,可以是运行于这些系统的软件单元、硬件单元或软硬件结合单元,也可以作为独立的挂件集成到这些系统中。实施例三图3示出了本发明第三实施例提供的消息读取装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分。消息读取单元31,用于从消息队列中读取指定的消息。在本发明实施例中,消息队列分为共用消息队列和专用消息队列,共用消息队列中消息没有严格的权限控制,相关的应用程序都可以访问,而专用消息队列只有具有一定权限的应用程序才可以读取,在具体的实施过程中,消息读取装置可以按照一定频率到消息队列中读取消息,也可以根据应用程序运行的需要读取需要的消息。消息解析单元32,用于根据预设的数据封装方式解析消息读取单元31读取的消肩、ο在本发明实施例中,预设的数据封装方式包括数据文件组成字段封装到消息中时,该字段的精度、数据表示格式等信息,在消息进行解析时,根据数据封装方式中对数据文件各个字段的封装方式,对相应的字段进行处理,例如,对于数据文件中空字段,对其补充相同数目的空格,对于小于规定的数据精度的字段,在数据前面补0。在本发明实施例中,该数据封装方式应与消息发送装置的数据封装方式同步,以保持对读取的消息的正确解析。数据文件输出单元33,用于输出从消息中解析得到的数据文件。在本发明实施例中,解析出来的数据文件可能是某个数据文件其中的一部分,应与其它消息中解析出来的数据文件进行重排、合并等操作,从而获得从消息发送装置发送的整个数据文件。在本发明实施例中,该消息读取装置可以用于中间件系统,或者用于不同应用程序间的互操作系统,可以是运行于这些系统的软件单元、硬件单元或软硬件结合单元,也可以作为独立的挂件集成到这些系统中。实施例四图4示出了本发明第三实施例提供的中间件系统的结构,为了便于说明,仅示出了与本发明实施例相关的部分。在本发明实施例中,应用程序41和应用程序43通过中间件系统42进行通信,完成数据的共享和交换,其中中间件系统42包括消息发送装置421、消息队列422、消息读取装置423,其中消息发送装置421,用于根据预先设置的数据文件长度对输入的数据文件进行分害!],根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息,将消息发送到消息队列。
9
在本发明实施例中,消息发送装置421向外提供相应的调用接口,接收应用程序输入的数据文件,该调用接口可以是EJB接口、Web服务接口等远程调用接口。消息队列422,用于存储消息发送装置421发送过来的消息。在本发明实施例中,消息队列中可存储的消息的长度是预先设定的,在预设的长度下,应尽量使消息中封装更多的数据信息。消息读取装置423,用于从消息队列中读取指定的消息,根据预设的数据封装方式解析读取到的消息,输出从消息中解析得到的数据文件。在本发明实施例中,消息读取装置423向外提供相应的调用接口,接收应用程序输入的读取数据请求,从消息队列中读取数据,该调用接口可以是EJB接口、Web服务接口等远程调用接口。在本发明实施例中,数据封装方式的设置可以根据消息队列进行设置,即一个消息队列设置关联的数据封装方式,也可以根据输入的数据文件设置关联的数据封装方式, 从而可以通过设置不同的数据封装方式,实现同一个消息队列发送不同数据类型的数据文件,提高应用程序的可用性和应用程序间的互操作性。在本发明实施例中,中间件系统通过消息发送装置、消息读取装置向应用程序提供相应的数据发送、读取接口,在消息发送装置中对应用程序输入的数据文件进行分割并封装,生成包含分割后的数据文件的消息,并发送到消息队列,在消息读取装置中根据数据封装方式对从消息队列中读取的消息进行解析,发送给请求数据的应用程序,实现了分布式环境下不同应用程序间的共享资源。本发明实施例通过根据预设的数据封装方式对输入的数据文件进行分割并封装, 生成包含分割后的数据文件的消息,并发送到消息队列,消息接收装置从消息队列中读取指定的消息,根据数据封装方式解析出读取的消息,克服了消息通信过程中使用定长文本文字,无法对不同类型的数据进行有效的描述,当消息中包含的数据文件字段长度、字段类型发生变化时,需要修改关联的应用程序,导致应用程序的可扩展性差,应用程序间的互操作性差的问题,为分布式环境下不同应用程序提供了一种有效的通信方法,使得应用程序的可扩展性更强,应用程序间的互操作性更好。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种消息发送方法,其特征在于,所述方法包括下述步骤 根据预先设置的数据文件长度对输入的数据文件进行分割;根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息;将所述消息发送到消息队列。
2.如权利要求1所述的方法,其特征在于,所述根据预先设置的数据文件长度对输入的数据文件进行分割的步骤之前,所述方法进一步包括下述步骤根据预设的消息长度以及输入的数据文件的数据记录单位,设置消息中封装的数据文件长度。
3.一种消息发送装置,其特征在于,所述装置包括文件分割单元,用于根据预先设置的数据文件长度对输入的数据文件进行分割; 消息生成单元,用于根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息;以及消息发送单元,用于将所述消息生成单元生成的消息发送到消息队列。
4.如权利要求3所述的装置,其特征在于,所述装置还包括文件长度设置单元,用于根据预设的消息长度以及输入的数据文件的数据记录单位, 设置消息中封装的数据文件长度。
5.一种消息读取方法,其特征在于,所述方法包括下述步骤 从消息队列中读取指定的消息;根据预设的数据封装方式解析所述消息; 输出从所述消息中解析得到的数据文件。
6.一种消息读取装置,其特征在于,所述装置包括 消息读取单元,用于从消息队列中读取指定的消息;消息解析单元,用于根据预设的数据封装方式解析所述消息;以及数据文件输出单元,用于输出从所述消息中解析得到的数据文件。
7.一种消息队列通信方法,其特征在于,所述方法包括下述步骤消息发送装置根据预先设置的数据文件长度对输入的数据文件进行分割; 消息发送装置根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息,将所述消息发送到消息队列; 消息读取装置从消息队列中读取指定的消息;消息读取装置根据预设的数据封装方式解析所述消息,输出从所述消息中解析得到的数据文件。
8.—种中间件系统,其特征在于,所述系统包括消息发送装置以及消息读取装置,其中消息发送装置,用于根据预先设置的数据文件长度对输入的数据文件进行分割,根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息, 将所述消息发送到消息队列;以及消息读取装置,用于从消息队列中读取指定的消息,根据预设的数据封装方式解析所述消息,输出从所述消息中解析得到的数据文件。
9.如权利要求8所述的系统,其特征在于,所述消息发送装置包括文件分割单元,用于根据预先设置的数据文件长度对输入的数据文件进行分割; 消息生成单元,用于根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息;以及消息发送单元,用于将所述消息生成单元生成的消息发送到消息队列。
10.如权利要求8所述的系统,其特征在于,所述消息读取装置包括 消息读取单元,用于从消息队列中读取指定的消息;消息解析单元,用于根据预设的数据封装方式解析所述消息;以及数据文件输出单元,用于输出从所述消息中解析得到的数据文件。
全文摘要
本发明适用于计算机技术领域,提供了一种消息发送和读取方法、装置及中间件系统,所述方法包括下述步骤根据预先设置的数据文件长度对输入的数据文件进行分割;根据预设的数据封装方式对分割后的数据文件进行封装,生成包含分割后的数据文件的消息;将所述消息发送到消息队列。本发明通过预设待发送数据的封装方式,对待发送的数据文件进行分割并封装,生成包含分割后的数据文件的消息,从而实现动态设置待发送消息中数据文件的封装方式,为分布式环境下不同应用程序提供了一种有效的通信方法,使得应用程序的可扩展性更强,应用程序间的互操作性更好。
文档编号H04L12/58GK102457442SQ201010525410
公开日2012年5月16日 申请日期2010年10月29日 优先权日2010年10月29日
发明者黎亮 申请人:金蝶软件(中国)有限公司