CN101848239B - 一种高时效性的分布式服务集成调用系统 - Google Patents

一种高时效性的分布式服务集成调用系统 Download PDF

Info

Publication number
CN101848239B
CN101848239B CN2010101686180A CN201010168618A CN101848239B CN 101848239 B CN101848239 B CN 101848239B CN 2010101686180 A CN2010101686180 A CN 2010101686180A CN 201010168618 A CN201010168618 A CN 201010168618A CN 101848239 B CN101848239 B CN 101848239B
Authority
CN
China
Prior art keywords
service
message
parameter
interface
transmission
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2010101686180A
Other languages
English (en)
Other versions
CN101848239A (zh
Inventor
蓝羽石
徐慧
丁峰
林剑柠
张煜
张萍
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CETC 28 Research Institute
Original Assignee
CETC 28 Research Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by CETC 28 Research Institute filed Critical CETC 28 Research Institute
Priority to CN2010101686180A priority Critical patent/CN101848239B/zh
Publication of CN101848239A publication Critical patent/CN101848239A/zh
Application granted granted Critical
Publication of CN101848239B publication Critical patent/CN101848239B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种高时效性的分布式服务集成调用系统,服务请求者与服务之间的调用采用二进制字节流格式的服务消息交换协议,调用产生的服务消息由服务消息编解码子系统根据XML格式的服务接口描述文件进行编码和解码处理,服务请求者和服务之间消息的传递通过一个服务消息传输子系统完成,服务消息传输子系统包括消息传输通道绑定模块和三种适用于不同情况且传输效率不同的消息通道。本发明由于采用了二进制字节流格式的服务消息交换协议,省去了大量的标签数据元素,能有效降低服务消息的尺寸大小,缩短网络中消息的传输时间;同时,在服务请求者与服务之间进行调用时选择效率最高的传输方式,从而提高服务消息的传输性能。

Description

一种高时效性的分布式服务集成调用系统
技术领域
本发明涉及分布式计算领域,当集成网络环境中的服务时,如何提高服务请求者与服务之间的集成调用性能的一种高时效性的分布式服务集成调用系统。
背景技术
目前,SOA为分布式系统的集成提供了良好的实现途径,Web服务技术是SOA的主要实现技术之一。但对于一些大型的非Internet领域应用的实时信息系统来说,不会在时效性要求很高的功能实现方面应用Web服务技术。这主要是由于Web服务技术更多强调服务调用的开放性与扩展性,在服务调用的时效性方面考虑还存在不足,尚不能满足此类实时信息系统的性能需求,其中体现有如下二个方面:
一是在服务层的调用协议方面,Web服务技术规范服务请求者与服务之间的调用是采用SOAP(简单对象访问协议)。而SOAP消息虽然简单并能很容易地穿过防火墙,但SOAP消息是基于XML格式的服务层消息传递协议,而XML是一种文本格式,比起其他一些非文本的消息格式需要更多的空间来包含对额外的语义和结构信息的描述,该消息会在核心数据的基础上,额外将大小按4到20的因子增长,这部分附加的内容是影响服务调用性能的重要因素,并且对带宽受限的环境来说,会对整个网络的性能造成严重的影响,甚至无法正常传输。再者,SOAP协议不支持直接传递二进制的数据正文。如果要传递二进制数据正文,需要首先对二进制数据正文进行编码才能用SOAP协议传递,经过编码的数据长度会加长。以BASE64编码为例,二进制数据经过BASE64编码后的长度将增加约1/3倍。这样,就又进一步增加了网络间消息传输的长度,降低了服务调用的效率。
二是在服务层的调用实现方面,Web服务技术没有提供一个统一、有效的用于表示网络中服务请求者与服务的地址的方法,目前绝大多数Web服务实现只定义了服务地址为IP地址和端口号,并没有为服务请求者提供地址定义方法,这样在实现服务调用时,无法准确知道服务请求者与服务之间的软件单元部署关系(如:两者之间的进程关系、节点关系),如果无法知道两者之间的软件单元部署关系,也就无法为两者之间的服务消息传递建立并绑定最优的传输通道,因为无视服务和服务请求者的软件单元实际部署关系而一律采用socket网络传输不是一个很好的选择。
发明内容
发明目的:本发明所要解决的技术问题是针对上述技术的不足,提供一种高时效性的分布式服务集成调用系统,一方面使得在网络中传输的服务消息长度尽可能缩短,节省网络带宽资源,提高消息传输效率速度;另一方面,通过为服务请求者和服务定义统一的地址表示方法,并为两者之间绑定最优的传输通道,提高调用性能。
技术方案:本发明公开了一种高时效性的分布式服务集成调用系统,应用于具有多个服务请求者和多个服务的分布式服务集成调用环境中;包括服务请求者、服务、服务接口描述文件、服务消息编解码子系统、服务消息传输子系统,其特征在于,服务请求者与服务之间的调用,采用二进制字节流格式的服务消息交换协议;
所述二进制字节流格式的服务消息交换协议包括二进制格式的服务消息头和二进制格式的服务消息正文;
所述服务消息包含服务消息头和服务消息正文,服务消息正文紧接在服务消息头之后;
所述的服务消息头和服务消息正文按照网络字节序进行排列;
所述服务消息头包含类型标识、版本信息、消息头长度、消息关联标识、超时时间值、响应回送IP地址、响应回送实体标识、服务标识长度、服务接口标识长度、服务标识、服务接口标识;
所述类型标识占4个比特位,用作判断服务消息的类型,进行服务消息分类;其中,类型标识(0000)2表示该消息是服务请求消息,服务请求消息正文中的内容包含编码后的服务输入参数值;类型标识(0001)2表示该消息是服务响应消息,服务响应消息正文中的内容包含编码后的服务输出参数值;类型标识(0010)2表示该消息是服务错误消息,服务错误消息正文中的内容是服务错误代码值;
所述消息关联标识用于在实现服务同步或异步调用时关联服务请求消息与服务响应消息;
所述超时时间值表示本条服务消息过期失效的时间,是基于UTC(Universal TimeCoordinated,通用协调时)的绝对时间值;
所述响应回送IP地址,是发起服务调用的服务请求者地址或者需要服务指定发送的一个目的地址;
所述服务消息在被发送前进行编码,在被接收后、处理前进行解码。
本发明中,所述的服务消息编解码子系统根据服务接口描述文件实现对各个服务消息的通用编码和解码处理,包括服务请求消息正文编码接口、服务请求消息正文解码接口、服务响应消息正文编码接口以及服务响应消息正文解码接口;
所述服务请求消息正文编码接口在服务请求者调用服务时执行,在服务请求者端对服务输入参数进行编码,所述服务输入参数包括服务接口的输入参数、输入输出参数,编码处理顺序与服务接口描述文件中的服务输入参数顺序一致,编码后的结果数据是服务请求消息正文;
所述服务请求消息正文解码接口在服务接收到服务请求消息时执行,服务端对服务请求消息正文中编码过的服务输入参数进行解码,解码处理顺序与服务输入参数编码处理顺序一致,解码后的结果数据是服务输入参数值;
所述服务响应消息正文编码接口在服务返回调用结果时执行,服务端对服务输出参数进行编码,服务输出参数包括服务接口的输出参数、输入输出参数和返回值,编码处理顺序与服务接口描述文件中的服务输出参数顺序一致,其中,返回值被最后编码,编码后的结果数据是服务响应消息正文;
所述服务响应消息正文解码接口在服务请求者接收到服务响应消息时执行,在服务请求者端对服务响应消息正文中编码过的服务输出参数进行解码,解码处理顺序与服务输出参数编码处理顺序一致,解码后的结果数据是服务输出参数值;
所述服务输入参数和服务输出参数都是服务参数,它们的类型包括基本类型、指针类型和复杂类型;其中,基本类型包括字符型、短整型、整型、长整型、单精度浮点型、双精度浮点型、字符串型;复杂类型包括结构类型、数组类型。
本发明中,所述的服务接口描述文件采用XML语言描述服务接口,一个服务接口描述文件用于描述一个服务的多个接口,描述文件的内容包括服务元素(SERVICE)、服务名称元素(SERVICENAME)、服务接口元素(METHOD)、接口名称元素(METHODNAME)、参数元素(PARAMETER)、参数元素属性、参数类型元素(TYPE)、参数类型属性;所述服务元素是服务接口描述的根元素;服务接口元素表示接口,作为服务元素的子元素;所述接口名称元素描述服务的接口名称;参数元素是接口参数的描述,接口的每个参数对应一个参数元素;参数元素属性包括参数名(PARANAME)、参数类型(PARATYPE)、参数序号(PARANO)、参数指针标志(isPOINTER)、参数模式标识(INOUT)、参数数组特性(NUMS);参数类型元素是参数类型的描述;参数类型属性包括类型名称(TYPENAME)、类型长度(TYPELENGTH)以及类型分类标识(KIND)。
本发明中,所述的服务消息传输子系统包括消息传输通道绑定模块、基于socket套接字的消息传输通道、基于共享区的消息传输通道和基于直接地址调用的消息传输通道;按照实现的传输效率的高低进行比较,基于直接地址调用的消息传输通道传输效率最高,其次是基于共享区的消息传输通道,最后是基于socket的消息传输通道;
所述服务消息传输子系统定义了标识服务或服务请求者位置的地址表示方法,所述地址表示方法为网络中的服务或服务请求者统一分配一个唯一的地址。所述地址由IP地址和实体标识两部分组成,实体标识表示服务或服务请求者的软件运行单元,各个服务或服务请求者采用相互区别的实体标识,所述IP地址用数值表示,占4个字节,所述实体标识用数值表示,占2个字节。
所述消息传输通道绑定模块是被服务请求者或服务调用的接口函数库,包括实体注册接口、消息通用传输接口;服务请求者或服务在初始化时调用实体注册接口将自己的实体标识注册到消息传输通道绑定模块中,服务消息通过消息通用传输接口收发。消息通用传输接口在收发服务消息时,根据服务请求者和服务的地址和已注册的实体标识信息,分析并判断服务请求者与服务之间的软件单元部署关系,实时绑定对应传输方式的消息通道,提高服务消息的传输效率。其中,服务和服务请求者之间的软件单元部署关系的判断方法为:服务请求者和服务的实体标识信息在消息传输通道绑定模块中都已注册,表示两者在同一个进程空间;服务请求者和服务的实体标识信息在消息传输通道绑定模块中未同时注册,但两者的IP地址相同,表示两者在同一个主机节点,不在同一个进程空间;服务请求者和服务的IP地址不同,表示两者不在同一个主机节点;
如果判断服务和服务请求者在同一个进程空间则绑定基于直接地址调用的消息传输通道,是将服务消息作为函数参数在两者的接口之间进行直接传递;
如果判断服务和服务请求者在同一个主机节点,但不在一个进程空间则绑定基于共享区的消息传输通道,是通过共享区交互和信号灯互斥的方式将服务消息在两者之间进行进程间通信传递;该通道主要包括共享区初始化接口、写共享区接口、读共享区接口、共享区退出接口;
如果判断服务和服务请求者不在同一个主机节点则绑定基于socket套接字的消息传输通道,是采用TCP/IP协议的socket接口方式将服务消息在两者之间进行网络通信传输;该通道主要包括网络传输初始化接口、网络发送接口、网络接收接口、网络传输退出接口。
有益效果:本发明由于采用了二进制字节流的方式作为协议,减少了基于XML的协议标签信息,并且在字节流中不包含参数名、参数类型等信息,而是将这些信息放到了服务接口描述文件中,又大大减少了网络中传输的消息长度。同时,在服务消息传输子系统中定义了标识服务或服务请求者位置的地址表示方法,使消息传输通道绑定模块可以实时绑定到最优的传输通道,从而有利于提高服务消息的传输效率,增强服务调用性能。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为本发明的原理图。
图2为本发明的服务消息交换协议组成图。
图3为本发明的服务消息正文结构图。
图4a和图4b为本发明的服务请求消息正文编码和解码流程图。
图5为本发明的服务调用示例图。
具体实施方式:
如图1所示,本发明公开了一种高时效性的分布式服务集成系统,该系统针对服务集成需要解决的时效性问题,进行了如下实现:该系统可以集成分布式网络环境中的多个服务请求者与多个服务,服务请求者与服务之间的调用采用二进制字节流格式的服务消息交换协议,调用产生的服务消息由服务消息编解码子系统通过解析服务接口描述文件进行编码和解码处理,服务消息的传递由服务消息传输子系统完成,服务消息传输子系统包括消息传输通道绑定模块和三种适用于不同情况且传输效率不同的消息通道,按传输效率的高低,它们分别是基于直接地址调用的消息传输通道、基于共享区的消息传输通道、基于TCP/IP的消息传输通道,服务消息的传递具体使用哪个消息通道,是由消息传输通道绑定模块根据服务和服务请求者之间的地址关系进行实时绑定的。
图2显示了本发明中的二进制字节流格式的服务消息交换协议(Binary-BasedService Message Exchange Protocol,简称BBSMEP)组成。所有的服务消息遵循服务消息交换协议,服务消息包括服务消息头和服务消息正文两部分,服务消息头在每条服务消息中都存在。图中,协议内容上方的数字代表比特位,从0~31,共32位,4个字节,协议中各组成部分对应的范围表示其占用的比特位个数。协议内容从左到右,从上至下的排列关系表示了协议中各组成部分在服务消息中的位置关系。服务消息头包括定长和不定长两个部分,定长部分占28个字节,其中包括3个字节的保留位,可用于扩展;变长部分为服务标识、服务接口标识。服务消息正文为可变长度,其内容可以是服务请求消息正文、服务响应消息正文或服务错误消息正文。
服务消息头包括类型标识(TypeID)、版本信息(Version)、消息头长度(HeadLength)、消息关联标识(CorrelationID)、超时时间值(Timeout)、响应回送IP地址(ReplyIP)、响应回送实体标识(ReplyEntity)、服务标识长度(SvcIDLength)、服务接口标识长度(InfIDLength)、服务标识(SvcID)、服务接口标识(InfID)以及保留位(Reserve)信息。类型标识(TypeID)是表示服务消息的类型,如果类型标识=(0000)2表示该消息是服务请求消息,消息正文中的内容包含编码过的服务输入参数值;如果类型标识=(0001)2表示该消息是服务响应消息,消息正文中的内容包含编码过的服务输出参数值;如果类型标识=(0010)2表示该消息是服务错误消息,消息正文中的内容是服务错误代码值。消息关联标识(CorrelationID)是服务请求消息与服务响应消息的关联标识,用于实现服务的同步或异步调用。超时时间值(Timeout)表示本条消息过期失效的时间,填写的是基于UTC的绝对时间值,单位为毫秒。当该值=0,表示本条服务消息永不过期。该协议字段帮助了时间敏感性较强的应用系统避免去处理已经过期的消息。响应回送IP地址(ReplyIP)和响应回送实体标识(ReplyEntity)共同组成来表示服务响应消息要发送的目的地地址。响应回送IP地址(ReplyIP)是占4个字节的数值型数据,响应回送实体标识(ReplyEntity)是占2个字节的数值型数据,当ReplyIP=0时,表示本次服务请求不需要返回响应,与此同时,CorrelationID可以被应用系统自定义用作其它扩展用途。
服务消息正文包括服务请求消息正文、服务响应消息正文以及服务错误消息正文。其中,服务错误消息正文中填写的是服务调用过程中产生的错误代码值,服务请求消息正文和服务响应消息正文中包含的是经过服务消息编解码子系统编码处理后的服务输入参数或服务输出参数值。服务请求消息正文和服务响应消息正文缓冲区结构如图3所示,图中所指的参数根据消息正文类型的不同含义不同,如果是服务请求消息正文,参数是指所有的服务输入参数,且参数的顺序与服务接口中的输入参数顺序一致;如果是服务响应消息正文,参数是指所有的服务输出参数,包括返回值,其中,返回值作为最后一个服务输出参数。以服务请求消息正文缓冲区为例,设缓冲区的起始地址=0,从起始地址0开始的4个字节存放服务请求消息正文的总长度;从地址4开始的2个字节存放第一个服务输入参数值的缓冲区字节长度,设存放的该参数值缓冲区字节长度为x,那么接下来从地址6开始的x个字节存放该参数值;如果有第二个服务输入参数,并且该服务输入参数是结构类型,它有两个成员参数,则接下来从地址6+x开始的2个字节存放第二个服务输入参数值的缓冲区字节长度,而该参数值的缓冲区字节长度是等于两个成员参数所占缓冲区字节长度之和,设第一个成员参数值的缓冲区字节长度为y1,第二个成员参数值的缓冲区字节长度为y2,那么存放的第二个参数值的缓冲区字节长度等于2+y1+2+y2;接下来从地址6+x+2开始的2个字节存放第二个服务输入参数的第一个成员参数值的缓冲区字节长度y1,从地址6+x+2+2开始的y1个字节存放第二个服务输入参数的第一个成员参数值;接下来从地址6+x+2+2+y1开始的2个字节存放第二个服务输入参数的第二个成员参数值的缓冲区字节长度y2,从地址6+x+2+2+y1+2开始的y2个字节存放第二个服务输入参数的第二个成员参数值;以此类推,如果最后一个服务输入参数值的缓冲区字节长度等于n,则缓冲区最后n个字节存放的是最后一个服务输入参数值。
以上所述的服务请求消息正文和服务响应消息正文的编码与解码处理都是由服务消息编解码子系统执行,图4a和图4b显示了服务请求消息正文编码接口和服务请求消息正文解码接口的实现流程。
如图4a所示,服务请求消息正文编码接口的具体实施步骤为:
1)通过接口参数传递方式,获取服务标识、服务接口标识以及服务参数;
2)根据服务标识,获取对应的服务接口描述文件;具体的服务接口描述文件内容示例如下:
    <SERVICE>
      <SERVICENAME>SampleService<SERVICENAME>
      <METHOD>
       <METHODNAME>SampleInf</METHODNAME>
       <PARAMETER  PARANAME=″a″PARATYPE=″int32″PARANO=″0″
isPOINTER=″1″NUMS=″1″INOUT=″IN″/>
       <PARAMETER PARANAME=″b″PARATYPE=″uint64″PARANO=″1″
isPOINTER=″0″NUMS=″3″INOUT=″IN″/>
       <PARAMETER  PARANAME=″c″PARATYPE=″string″PARANO=″2″
isPOINTER=″1″NUMS=″1″INOUT=″InOut″/>
       <PARAMETER    PARANAME=″d″PARATYPE=″S_DAReqst″
PARANO=″3″isPOINTER=″0″NUMS=″1″INOUT=″IN″/>
       <PARAMETER  PARANAME=″e″PARATYPE=″bool″PARANO=″4″
isPOINTER=″0″NUM=″1″INOUT=″OUT″/>
       </METHOD>
       <TYPE TYPENAME=″int32″KIND=″BASIC″TYPELENGTH=″32″/>
       <TYPE TYPENAME=uint64″KIND=″BASIC″TYPELENGTH=″64″/>
       <TYPE TYPENAME=″string″KIND=″ARRAY″/>
       <TYPE TYPENAME=″bool″KIND=″BASIC″TYPELENGTH=″32″/>
       <TYPE TYPENAME=″char″KIND=″BASIC″TYPELENGTH=″8″/>
       <TYPE TYPENAME=″S_DAReqst″KIND=″STRUCT″>
          <PARAMETER PARANAME=″x″PARATYPE=″int64″PARANO=″0″
isPOINTER=″0″NUMS=″1″/>
          <PARAMETER PARANAME=″y″PARATYPE=″char″PARANO=″1″
isPOINTER=″0″NUMS=″1″/>
       </TYPE>
    </SERVICE>
上述示例中,SampleService服务有一个SampleInf接口,SampleInf接口有5个参数,分别为a、b、c、d、e,其中,a、b、d是接口的输入参数,c是接口的输入输出参数,e是接口的返回值。作为服务输入参数的有接口的输入参数和输入输出参数,共4个,分别为a、b、c、d;作为服务输出参数的有接口的输出参数、输入输出参数和返回值,共2个,分别为c、e。其中,参数b是数组类型参数,参数d是结构类型参数,参数d有2个成员参数x、y。
3)解析服务接口描述文件,形成一个服务接口内存树,该内存树结构中存储从服务接口描述文件中解析出来的元素名、元素值、属性值列表以及不同元素之间的父子或兄弟关系;
4)根据服务接口标识,从服务接口内存树中将属于该服务接口的参数信息解析生成为一个参数属性表。
5)参数属性表的记录字段包括参数序号(或成员参数序号)、参数名(或成员参数名)、成员标识、类型名称、指针标志、模式标识、数组标识、值长度、第一个成员参数标识号、下一个参数序号(或下一个成员参数序号)。每个参数在参数属性表中都有一条记录相对应,如果参数的类型是结构类型,参数的每个成员在参数属性表中也有一条记录相对应,参数与成员参数之间或成员参数与子成员参数之间的所属关系通过第一个成员参数序号和下一个成员参数序号关联。成员参数具有和参数一样的类型定义,即成员参数可以有子成员参数。成员参数序号从参数序号之后开始编号。成员标识=0,表示属性表中的该条记录对应的是参数;成员标识=1,表示属性表中的该条记录对应的是成员参数。参数序号的值与参数在服务接口中的排列序号相同。属性表中的第一个成员参数序号=0时,表示该参数(或成员参数)不是结构类型的参数;第一个成员参数序号>0时,表示该参数(或成员参数)是结构类型的参数,并且是第一个成员参数在属性表中的序号值。指针标志=0表示该参数(或成员参数)不是指针类型的参数,指针标志=1表示该参数(或成员参数)是指针类型的参数。模式标识=0表示该参数是接口的输入参数;模式标识=1表示该参数是接口的输出参数;模式标识=2表示该参数是接口的输入输出参数。数组标识用正整数表示,数组标识>1表示该参数(或成员参数)是数组,数组标识的值表示数组元素的个数。值长度是该参数(或成员参数)值的字节长度。
6)读取参数属性表,计算成员标识=0并且模式标识=0或=2的参数个数,结果得出服务输入参数的实际个数;
7)根据参数属性表,读取服务请求者传入的服务输入参数,分别解析计算出服务输入参数的值长度,并写入参数属性表的值长度字段中;
8)计算值长度的过程是:如果参数的类型是基本类型,且指针标志=0或=1,值长度为定义的基本类型长度;如果参数的类型是复杂类型中的结构类型,且指针标志=0或=1,值长度的计算方法是以递归的方式逐一计算出结构类型中每个成员参数及成员参数中的子成员参数的值长度,并将它们的值长度进行累计相加,得出该结构类型的参数的值长度;如果参数的数组标识>1,值长度为每个数组元素的值长度的累加值;
9)将所有服务输入参数的值长度进行累计,并加上参数属性表中服务输入参数及所有成员参数的个数的2倍值,得出服务输入参数编码缓冲区的长度,动态申请该长度的服务输入参数编码缓冲区;
10)根据参数属性表,按照服务请求正文缓冲区结构将服务请求者调用的服务接口的服务输入参数值依次放入服务输入参数编码缓冲区中;
11)最后,生成服务请求消息正文。动态申请服务请求消息正文缓冲区,缓冲区的起始4个字节存放服务输入参数编码缓冲区的长度,从第5个字节开始放入服务输入参数编码缓冲区的内容。
如图4b所示,服务请求消息正文解码接口的具体实施步骤为:
1)通过接口传递服务请求消息;
2)解析服务请求消息的消息头,得到服务标识,获取对应的服务接口描述文件;
3)该步骤同服务请求消息正文编码步骤3);
4)解析服务请求消息的消息头,得到服务接口标识,从服务接口内存树中将属于该服务接口的参数信息解析生成为一个参数属性表。
5)该步骤同服务请求消息正文编码步骤5);
6)该步骤同服务请求消息正文编码步骤6);
7)解析服务请求消息正文,获取服务请求消息正文中的起始4个字节的值,得出服务输入参数编码缓冲区的长度;
8)最后,读取参数属性表,根据参数属性表中服务输入参数的描述,顺序读取服务输入参数编码缓冲区,依次解码得出服务输入参数的值。方法是:首先定义一个偏移标记,用于指示当前读取服务输入参数缓冲区的起始位置,该偏移标记初始化为0;在偏移标记的位置开始从服务输入参数编码缓冲区中读出2个字节,得到第一个服务输入参数的值长度,偏移标记加2;此时判断参数属性表中该参数的类型名称,如果是基本类型,则按得到的值长度从当前偏移标记的位置开始读出相应长度的数据,并赋值到服务输入参数变量中;如果是结构类型,则按得到的值长度从当前偏移标记的位置开始读出相应长度的数据,读出的数据是该服务输入参数的成员参数缓冲区,然后进行递归处理,将成员参数缓冲区以上述解析服务输入参数缓冲区的方法继续解析,读出该服务输入参数的成员参数值,从而解码得到结构类型的服务输入参数的值。
本发明中所述的服务响应消息正文编码接口的具体实施步骤为:
1)通过接口传递服务标识、服务接口标识以及服务参数;
2)根据服务标识,获取对应的服务接口描述文件;
3)该步骤同服务请求消息正文编码步骤3);
4)根据服务接口标识,从服务接口内存树中将属于该服务接口的参数信息解析出来,生成一个参数属性表。
5)该步骤同服务请求消息正文编码步骤5);
6)读取参数属性表,计算成员标识=0并且模式标识=1或=2的参数个数,结果得出服务输出参数的实际个数;
7)根据参数属性表,读取服务传入的服务输出参数,分别解析计算出服务输出参数的值长度,并写入参数属性表的值长度字段中;
8)计算值长度的过程同服务请求消息正文编码步骤8);
9)将所有服务输出参数的值长度进行累计,并加上参数属性表中服务输出参数及所有成员参数的个数的2倍值,得出服务输出参数编码缓冲区的长度,动态申请该长度的服务输出参数编码缓冲区;
10)根据参数属性表,将服务输出参数值依次放入服务输出参数编码缓冲区中;
11)最后,生成服务响应消息正文。动态申请服务响应消息正文缓冲区,缓冲区的起始4个字节存放服务输出参数编码缓冲区的长度,从第5个字节开始放入服务输出参数编码缓冲区的内容。
本发明中所述的服务响应消息正文解码接口的具体实施步骤为:
1)通过接口传递服务响应消息;
2)解析服务响应消息的消息头,得到服务标识,获取对应的服务接口描述文件;
3)该步骤同服务请求消息正文编码步骤3);
4)解析服务响应消息的消息头,得到服务接口标识,从服务接口内存树中将属于该服务接口的参数信息解析生成为一个参数属性表。
5)该步骤同服务请求消息正文编码步骤5);
6)该步骤同服务响应消息正文编码步骤6);
7)解析服务响应消息正文,获取服务响应消息正文中的起始4个字节的值,得出服务输出参数编码缓冲区的长度;
8)最后,读取参数属性表,根据参数属性表中服务输出参数的描述,顺序读取服务输出参数编码缓冲区,依次解码得出服务输出参数的值。方法是:首先定义一个偏移标记,用于指示当前读取服务输出参数缓冲区的起始位置,该偏移标记初始化为0;在偏移标记的位置开始从服务输出参数编码缓冲区中读出2个字节,得到第一个服务输出参数的值长度,偏移标记加2;此时判断参数属性表中该参数的类型名称,如果是基本类型,则按得到的值长度从当前偏移标记的位置开始读出相应长度的数据,并赋值到服务输出参数变量中;如果是结构类型,则按得到的值长度从当前偏移标记的位置开始读出相应长度的数据,读出的数据是该服务输出参数的成员参数缓冲区,然后进行递归处理,将成员参数缓冲区以上述解析服务输出参数缓冲区的方法继续解析,读出该服务输出参数的成员参数值,从而解码得到结构类型的服务输出参数的值。
图5是一个服务调用的示例图,是本发明包含但不仅限于的一个实施案例,现有一个系统,存在模块A和模块B,模块A需要调用模块B来完成系统的某项功能,因此,模块A是服务请求者,模块B是服务,它们分别被标识为服务请求者Requester和服务Service。假设系统在第一个阶段运行时,Requester和Service被部署在两台不同的主机上,其IP地址分别为IP1和IP2,实体标识分别为Entity1和Entity2。此时Requester调用Service的具体实施步骤如下:
1)Requester调用本地的消息传输通道绑定模块的实体注册接口,将本实体标识注册在该模块中;
2)Requester调用服务消息编解码子系统提供的服务请求消息正文编码接口对服务输入参数进行编码,同时将Service服务标识和服务接口标识传递给该接口;
3)服务消息编解码子系统在Requester第一次调用Service时解析存储在本地的服务接口描述文件,并将解析信息缓存在内存区中;
4)服务消息编解码子系统按照上述的服务请求消息正文编码方法对服务输入参数进行编码,并遵循服务消息交换协议生成服务消息头,形成完整的服务请求消息;
5)Requester调用消息通用传输接口,将服务请求消息传递给服务消息传输子系统进行消息传输处理;
6)消息传输通道绑定模块此时对注册的实体标识信息、Requester与Service的IP地址进行判断,发现IP1不等于IP2;
7)消息传输通道绑定模块在Requester第一次调用Service时调用网络传输初始化接口创建一个基于socket的消息传输通道,缓存Requester、Service与新建通道的信息;
8)消息传输通道绑定模块调用网络发送接口,由基于socket的消息传输通道将服务请求消息传送给Service;
9)Service所在主机的基于socket的消息传输通道接收到服务请求消息后,通知Service;
10)Service调用消息通用传输接口获取服务请求消息;
11)Service调用服务消息编解码子系统提供的服务请求消息正文解码接口对服务请求消息进行解码;
12)服务消息编解码子系统解析服务请求消息头与消息正文,在第一次接收到请求时解析本地的服务接口描述文件,并将解析信息缓存在内存中;
13)服务消息编解码子系统按照上述的服务请求消息解码方法解析出服务输入参数值,并返回给Service;
14)Service根据Requester指定调用的服务接口标识,执行相应的接口功能,返回服务输出参数;
15)Service调用服务消息编解码子系统提供的服务响应消息正文编码接口;
16)服务消息编解码子系统对服务输出参数进行编码,生成服务响应消息,返回给Service;
17)Service调用消息通用传输接口向Requester发送服务响应消息;
18)Requester所在主机的基于socket的消息传输通道接收到服务响应消息后,通知Requester;
19)Requester调用消息通用传输接口获取服务响应消息;
20)Requester调用服务消息编解码子系统提供的服务响应消息正文解码接口对服务响应消息进行解码;
21)服务消息编解码子系统对服务响应消息进行解码,将解码出来的服务输出参数值返回给Requester;
22)Requester根据返回的服务输出参数值执行相应的处理。
假设当系统进入到第二个阶段时,需要将Requester和Service都部署在IP1上,实体标识不变,此时Requester调用Service时,消息传输通道绑定模块会发现两者的IP地址都为IP1,在上述服务调用的实施步骤7)中,消息传输通道绑定模块会动态实时的改为调用共享区初始化接口创建一个基于共享区的消息传输通道,为Requester和Service传递服务请求/响应消息。假设最后,系统将Requester和Service都配置到一个进程中加载运行,此时Requester调用Service时,消息传输通道绑定模块会发现两者的IP地址都为IP1,同时在本地的实体注册信息中能够找到Entity1和Eniity2,在上述服务调用的实施步骤7)中,消息传输通道绑定模块会将服务消息作为函数参数,通过调用Service的接口和调用Requester的接口在两者之间直接传递。在以上几个不同阶段的执行过程中,对Requester和Service程序都不做任何编码修改。
本发明提供了一种高时效性的分布式服务集成调用系统的思路及方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。

Claims (2)

1.一种高时效性的分布式服务集成调用系统,应用于具有多个服务请求者和多个服务的分布式服务集成调用环境中;包括服务请求者、服务、服务接口描述文件、服务消息编解码子系统、服务消息传输子系统,其特征在于,服务请求者与服务之间的调用,采用二进制字节流格式的服务消息交换协议;
所述二进制字节流格式的服务消息交换协议包括二进制格式的服务消息头和二进制格式的服务消息正文;
所述服务消息正文紧接在服务消息头之后;所述的服务消息头和服务消息正文按照网络字节序进行排列;
所述服务消息头包含类型标识、版本信息、消息头长度、消息关联标识、超时时间值、响应回送IP地址、响应回送实体标识、服务标识长度、服务接口标识长度、服务标识、服务接口标识以及保留位;
所述类型标识占4个比特位,用作判断服务消息的类型,进行服务消息分类;其中,类型标识(0000)2表示该消息是服务请求消息,服务请求消息正文中的内容包含编码后的服务输入参数值;类型标识(0001)2表示该消息是服务响应消息,服务响应消息正文中的内容包含编码后的服务输出参数值;类型标识(0010)2表示该消息是服务错误消息,服务错误消息正文中的内容是服务错误代码值;
所述消息关联标识用于在实现服务同步或异步调用时关联服务请求消息与服务响应消息;
所述超时时间值表示本条服务消息过期失效的时间,是基于UTC的绝对时间值;
所述响应回送IP地址,是发起服务调用的服务请求者地址或者需要服务指定发送的一个目的地址;
所述服务消息在被发送前进行编码,在被接收后、处理前进行解码
Figure FSB00000838342800011
所述服务接口描述文件采用XML语言描述服务接口,一个服务接口描述文件用于描述一个服务的多个接口,描述文件的内容包括服务元素、服务名称元素、服务接口元素、接口名称元素、参数元素、参数元素属性、参数类型元素、参数类型属性;所述服务元素是服务接口描述的根元素;所述服务接口元素表示接口,作为服务元素的子元素;接口名称元素描述服务的接口名称;参数元素是接口参数的描述,接口的每个参数对应一个参数元素;参数元素属性包括参数名、参数类型、参数序号、参数指针标志、参数模式标识、参数数组特性;参数类型元素是参数类型的描述;参数类型属性包括类型名称、类型长度以及类型分类标识;
所述的服务消息传输子系统包括消息传输通道绑定模块、基于socket套接字的消息传输通道、基于共享区的消息传输通道和基于直接地址调用的消息传输通道;
所述服务消息传输子系统定义了标识服务或服务请求者位置的地址表示方法;所述地址表示方法为网络中的服务或服务请求者统一分配一个唯一的地址,所述地址由IP地址和实体标识两部分组成,实体标识表示服务或服务请求者的软件运行单元,各个服务或服务请求者采用相互区别的实体标识,所述IP地址用数值表示,占4个字节,所述实体标识用数值表示,占2个字节;
所述消息传输通道绑定模块是被服务请求者或服务调用的接口函数库,包括实体注册接口、消息通用传输接口;服务请求者或服务在初始化时调用实体注册接口将自己的实体标识注册到消息传输通道绑定模块中,服务消息通过消息通用传输接口收发;消息通用传输接口在收发服务消息时,根据服务请求者和服务的地址和已注册的实体标识信息,判断服务请求者与服务之间的软件单元部署关系,实时绑定对应传输方式的消息通道;其中,服务和服务请求者之间的软件单元部署关系的判断方法为:服务请求者和服务的实体标识信息在消息传输通道绑定模块中都已注册,表示两者在同一个进程空间;服务请求者和服务的实体标识信息在消息传输通道绑定模块中未同时注册,但两者的IP地址相同,表示两者在同一个主机节点,不在同一个进程空间;服务请求者和服务的IP地址不同,表示两者不在同一个主机节点;
如果判断服务和服务请求者在同一个进程空间则绑定基于直接地址调用的消息传输通道,是将服务消息作为函数参数在两者的接口之间进行直接传递;
如果判断服务和服务请求者在同一个主机节点,但不在一个进程空间则绑定基于共享区的消息传输通道,通过共享区交互和信号灯互斥的方式将服务消息在两者之间进行进程间通信传递;
如果判断服务和服务请求者不在同一个主机节点则绑定基于socket套接字的消息传输通道,采用TCP/IP协议的socket接口方式将服务消息在两者之间进行网络通信传输。
2.根据权利要求1所述的一种高时效性的分布式服务集成调用系统,其特征在于,服务消息编解码子系统根据服务接口描述文件实现对各个服务消息的通用编码和解码处理,包括服务请求消息正文编码接口、服务请求消息正文解码接口、服务响应消息正文编码接口以及服务响应消息正文解码接口;
所述服务请求消息正文编码接口在服务请求者调用服务时执行,在服务请求者端对服务输入参数进行编码,所述服务输入参数包括服务接口的输入参数、输入输出参数,编码处理顺序与服务接口描述文件中的服务输入参数顺序一致,编码后的结果数据是服务请求消息正文;
所述服务请求消息正文解码接口在服务接收到服务请求消息时执行,在服务端对服务请求消息正文中编码过的服务输入参数进行解码,解码处理顺序与服务输入参数编码处理顺序一致,解码后的结果数据是服务输入参数值;
所述服务响应消息正文编码接口在服务返回调用结果时执行,在服务端对服务输出参数进行编码,所述服务输出参数包括服务接口的输出参数、输入输出参数和返回值,编码处理顺序与服务接口描述文件中的服务输出参数顺序一致,其中,返回值被最后编码,编码后的结果数据是服务响应消息正文;
所述服务响应消息正文解码接口在服务请求者接收到服务响应消息时执行,在服务请求者端对服务响应消息正文中编码过的服务输出参数进行解码,解码处理顺序与服务输出参数编码处理顺序一致,解码后的结果数据是服务输出参数值;
所述服务输入参数和服务输出参数的类型包括基本类型、指针类型和复杂类型;其中,基本类型包括字符型、短整型、整型、长整型、单精度浮点型、双精度浮点型、字符串型;复杂类型包括结构类型、数组类型。
CN2010101686180A 2010-05-11 2010-05-11 一种高时效性的分布式服务集成调用系统 Active CN101848239B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010101686180A CN101848239B (zh) 2010-05-11 2010-05-11 一种高时效性的分布式服务集成调用系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010101686180A CN101848239B (zh) 2010-05-11 2010-05-11 一种高时效性的分布式服务集成调用系统

Publications (2)

Publication Number Publication Date
CN101848239A CN101848239A (zh) 2010-09-29
CN101848239B true CN101848239B (zh) 2012-11-28

Family

ID=42772697

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010101686180A Active CN101848239B (zh) 2010-05-11 2010-05-11 一种高时效性的分布式服务集成调用系统

Country Status (1)

Country Link
CN (1) CN101848239B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012065264A1 (en) * 2010-11-15 2012-05-24 Research In Motion Limited Controlling data transfer on mobile devices
CN102833357A (zh) * 2011-06-17 2012-12-19 上海晨阑数据技术有限公司 一种与第三方通信的接口平台
CN102611530A (zh) * 2012-03-08 2012-07-25 北京神州数码思特奇信息技术股份有限公司 电信数据的编码和解码的方法
CN103812838A (zh) * 2012-11-13 2014-05-21 中国移动通信集团公司 一种服务调用方法和设备及系统
CN103701921A (zh) * 2013-12-31 2014-04-02 曙光云计算技术有限公司 云环境下基于接口调用的业务实现方法和装置
CN105553953B (zh) * 2015-12-09 2019-01-25 许继电气股份有限公司 一种基于广播的高压直流输电系统中数据服务的实现方法
CN110138753B (zh) * 2019-04-26 2021-07-23 中国工商银行股份有限公司 分布式消息服务系统、方法、设备及计算机可读存储介质
CN112579147A (zh) * 2020-12-14 2021-03-30 武汉联影医疗科技有限公司 软件集成方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1738309A (zh) * 2004-08-20 2006-02-22 华为技术有限公司 数据交换方法
CN101166197A (zh) * 2006-10-17 2008-04-23 国际商业机器公司 用于提供web服务的设备以及方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050050228A1 (en) * 2003-08-29 2005-03-03 Michael Perham Method and apparatus for the use of dynamic XML message formats with web services

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1738309A (zh) * 2004-08-20 2006-02-22 华为技术有限公司 数据交换方法
CN101166197A (zh) * 2006-10-17 2008-04-23 国际商业机器公司 用于提供web服务的设备以及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
于守键.基于Web服务组合的业务流程集成关键技术研究.《中国博士学位论文全文数据库》.2006, *

Also Published As

Publication number Publication date
CN101848239A (zh) 2010-09-29

Similar Documents

Publication Publication Date Title
CN101848239B (zh) 一种高时效性的分布式服务集成调用系统
CN102480462B (zh) 通用协议适配方法及装置
CN102104541B (zh) 报头处理引擎
CN111131037B (zh) 基于虚拟网关的数据传输方法、装置、介质与电子设备
US6502236B1 (en) Method and apparatus for automatic generation of programs for processing data units of multiple formats
US7954108B2 (en) Method and apparatus for accelerating generic inter-ORB protocol for a CORBA ORB
CN103747004A (zh) 物联网平台通信协议的实现方法
CN102810069A (zh) 一种java对象的请求和响应方法、装置、系统和终端
CN111064726B (zh) 一种goose协议与hdlc协议数据转换的实现方法及系统
CN101631261B (zh) 信令跟踪方法、信令跟踪后台装置及跟踪系统
CN109905321A (zh) 一种用于自定义高速接口与以太网交互的路由控制系统
CN103368872A (zh) 数据包转发系统和方法
CN110830466A (zh) 一种基于xml的dl/t645规约报文的组帧方法及装置
CN103002047A (zh) 一种rpc式web服务架构方法
CN101609427A (zh) 一种可编程的网络服务自动化测试系统及方法
CN111290979B (zh) 数据传输方法、装置及系统
CN102438048B (zh) 一种互联网中远程服务调用的方法和系统
CN116248758A (zh) 一种高效的内核-片上网络的桥式连接结构
CN101030927B (zh) 基于通信中间件的电信oss子系统间的接口通信方法
CN106789440B (zh) 一种ip包包头检测方法及装置
CN103368832B (zh) 基于滑动窗口的混合交换网络时隙分配方法
EP1548591B1 (en) Method, apparatuses and instruction set for an accelerator for object-oriented communications
CN110278177B (zh) 一种ip包包头检测方法及装置
CN109413137A (zh) 一种基于avro的PHP请求Python的方法
CN112737915B (zh) 基于智能网卡的内网隧道跨域网关转发方法、系统、设备和介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent for invention or patent application
CB03 Change of inventor or designer information

Inventor after: Lan Yushi

Inventor after: Xu Hui

Inventor after: Ding Feng

Inventor after: Lin Jianning

Inventor after: Zhang Yu

Inventor after: Zhang Ping

Inventor before: Xu Hui

Inventor before: Lin Jianning

Inventor before: Zhang Yu

Inventor before: Zhang Ping

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: XU HUI LIN JIANNING ZHANG YU ZHANG PING TO: LAN YUSHI XU HUI DING FENG LINJIANNING ZHANG YU ZHANG PING

C14 Grant of patent or utility model
GR01 Patent grant