发明内容
本发明要解决的技术问题在于避免现有技术的不足之处而提出一种克服现有技术存在的缺陷,降低系统的连接维度,减少各个子系统间的连接数量,简化了系统的配置的以平台消息总线机制实现子系统间信息交互的方法。
本发明解决所述技术问题可以通过采用以下技术方案来实现:
实施一种以平台消息总线机制实现子系统间信息交互的方法,基于包括至少一个客户端,以及至少一个服务器端的网络系统;尤其是,
所述方法在网络系统内建立一个企业信息构建平台 Enterprise Platform for Information Constructor;该企业信息构建平台EPIC包括分别设置在各服务器端和客户端的消息处理层模块,以及借助传输控制协议Transmission Control Protocol/用户数据报协议User Datagram Protocol与各消息处理层模块实现数据传输的分发器模块;所述企业信息构建平台EPIC按照以下步骤完成各子系统间的信息交互,
A. 系统按照配置文件完成系统运行状态初始化;
B. 所述各子系统借助各自的消息处理层模块与分发器模块建立连接,并以服务的方式分别向企业信息构建平台EPIC注册;
D. 已注册的子系统借助消息处理层模块发送的服务处理请求消息,所述分发器模块根据服务处理请求消息向各已注册的子系统转发服务处理请求消息,实现在子系统间建立信息交互。
所述消息处理层模块是分别寄生于各自对应的服务器端和客户端的寄生层模块,用于对要发送的来自服务器端或者客户端的应用层消息实施封装处理,对服务器端或者客户端的应用层要接收的消息实施解包处理;
所述分发器模块包括数据链路层模块和网络连接层;所述数据链路层用于完成对来自消息处理层模块的数据的分帧处理,确认接收和发送数据完整性验证;所述网络连接层完成网络物理连接初始化,按照数据链路层的要求完成数据的传输控制协议Transmission Control Protocol/用户数据报协议User Datagram Protocol传输、完成网络物理连接管理。
为保证系统准确及时更新平台连接情况,所述步骤A包括如下分步骤,
A11. 系统按照配置文件完成系统运行状态初始化,所述系统运行状态初始化包括设置心跳数据包发送周期;
那么在步骤B与步骤D之间还包括如下步骤,
C. 完成步骤B的已经注册的各子系统借助各自的消息处理层模块,按照分步骤A11设置的心跳数据包发送周期,每间隔一个心跳数据包发送周期分别向分发器模块发送心跳数据包;如果分发器模块在N个心跳数据包发送周期内未收到来自子系统的消息处理层模块的心跳数据包,所述分发器模块取消该子系统的注册。所述N=3。
所述分发器模块包括用于存储各子系统与分发器模块注册信息及数据连接状态的连接池,那么子系统的注册过程具体为所述步骤B包括如下分步骤,
B21. 子系统的消息处理层模块从该子系统的配置文件中获取所述子系统提供的服务的服务识别号Service ID,以及该服务要连接的分发器模块网际协议IP地址和端口信息,并封装成注册消息体数据包;
B22. 步骤B21所述子系统依据注册消息体数据包中的服务要连接的分发器模块网际协议IP地址和端口信息,依据传输控制协议TCP/用户数据报协议UDP与分发器模块的相应端口建立套接字SOCKET连接,并将所述注册消息体数据包发送至分发器模块;
B23. 分发器模块根据分步骤B22发送的注册消息体数据包,将所述子系统的服务存储至所述连接池中;
B24. 分发器模块将注册返回消息回传给所述子系统的消息处理层模块。
上述方法中还可以实现主备子系统注册,所述分步骤B23还进一步包括以下分步骤,
B2311. 分发器模块根据分步骤B22发送的注册消息体数据包中的所述服务要连接的分发器模块网际协议IP地址,判断该分发器模块要连接的网际协议IP地址是否与在连接池中已注册服务的要连接的分发器模块网际协议IP地址相同;如果相同,分发器模块正常刷新连接池,执行分步骤B2313;如果不相同,执行分步骤2312;
B2312. 分发器模块根据分步骤B22发送的注册消息体数据包中的服务识别码Service ID,判断该服务识别码Service ID是否与在连接池已经注册的服务的服务识别码Service ID相同;如果不相同,将分步骤B22发送的注册消息体数据包对应的服务的子系统在连接池存储为该项服务的主用子系统,执行分步骤2314;如果相同,将分步骤B22发送的注册消息体数据包对应的服务的子系统在连接池存储为该项服务的备用子系统,执行分步骤2315;
B2313. 将注册返回信息设置为重复注册信息;
B2314. 将注册返回信息设置为主用子系统注册信息;
B2315. 将注册返回信息设置为备用子系统注册信息。
本发明还可以通过心跳数据包实施传送子系统负载情况,A21. 系统按照配置文件完成系统运行状态初始化,所述系统运行状态初始化包括设置心跳数据包发送周期;
那么在步骤B与步骤D之间还包括如下步骤,
C21. 完成步骤B的已经注册的各子系统借助各自的消息处理层模块按照分步骤A21设置的心跳数据包发送周期,每间隔一个心跳数据包发送周期分别向分发器模块发送心跳数据包;所述心跳数据包包括子系统的负载状况信息;
C22. 如果分发器模块在N个心跳数据包发送周期内未收到来自子系统的消息处理层模块的心跳数据包,执行分步骤C23至C27,
C23. 分发器模块判断所述子系统是主用子系统还是备用子系统;如果是主用子系统执行分步骤C24至C26;如果是备用子系统,执行分步骤C27;
C24. 在连接池中查找所述主用子系统对应的服务在连接池中是否存在备用子系统,如果存在备用子系统,执行分步骤C25;如果不存在备用子系统,执行分步骤C26;
C25. 所述分发器模块在连接池中删除所述主用子系统的对应的服务,并且根据各备用子系统发送的心跳数据包中的负载状况信息,选择负载最轻的备用子系统修改设置为主用子系统;
C26. 所述分发器模块在连接池中直接删除所述主用子系统的对应的服务;
C27. 所述分发器模块在连接池中直接删除所述备用子系统的对应的服务。
综合上述方案本发明还支持多重消息传播方式,所述步骤A包括如下分步骤,
A31. 系统按照配置文件完成系统运行状态初始化,所述系统运行状态初始化包括设置心跳数据包发送周期;
那么,所述步骤B包括如下分步骤,
B31. 子系统的消息处理层模块从该子系统的配置文件中获取所述子系统提供的服务的服务识别号Service ID,以及该服务要连接的分发器模块网际协议IP地址和端口信息,并封装成注册消息体数据包;
B32. 步骤B21所述子系统依据注册消息体数据包中的服务要连接的分发器模块网际协议IP地址和端口信息,依据传输控制协议TCP/用户数据报协议UDP与分发器模块的相应端口建立套接字SOCKET连接,并将所述注册消息体数据包发送至分发器模块;
B33. 分发器模块根据分步骤B22发送的注册消息体数据包,将所述子系统的服务存储至所述连接池中;
B34. 分发器模块将注册返回消息回传给所述子系统的消息处理层模块。
所述步骤C包括如下分步骤,
C31. 完成分步骤B31至B34的已经注册的各子系统借助各自的消息处理层模块按照分步骤A31设置的心跳数据包发送周期,每间隔一个心跳数据包发送周期分别向分发器模块发送心跳数据包;所述心跳数据包包括子系统的负载状况信息;如果分发器模块在N个心跳数据包发送周期内未收到来自子系统的消息处理层模块的心跳数据包,所述分发器模块取消该子系统的注册。
所述步骤D包括如下分步骤,
D301. 已注册的子系统借助消息处理层模块发送的服务处理请求消息,所述服务处理请求消息包括请求服务的服务识别码Service ID、请求服务的要连接的分发器模块网际协议IP地址和消息转发机制信息;该消息转发机制包括广播消息、组播消息、指定服务消息和定点消息;
D302. 分发器模块判断服务处理请求消息是否合法;如果合法,执行以下分步骤D33至D3;如果不合法,直接执行分步骤D311;
D303. 判断消息转发机制信息是否是广播消息;如果是广播消息,执行分步骤D304;如果不是广播消息,执行分步骤D305;
D304. 将服务处理请求消息转发给除了发送该服务处理请求消息子系统之外的所有已注册的子系统,然后执行分步骤D312;
D305. 在已经注册的子系统中查找是否存在子系统的服务识别码Service ID与所述服务处理请求消息的请求服务的服务识别码Service ID相同;如果存在,执行步骤D306;如果不存在,执行步骤D311;
D306. 判断消息转发机制信息是否是组播消息;如果是组播消息,执行分步骤D307;如果不是组播消息,执行分步骤D308;
D307. 将服务处理请求消息转发给子系统的服务识别码ID与请求服务的服务识别码Service ID相同子系统,然后执行分步骤D312;
D308. 判断消息转发机制信息是否是指定服务消息;如果是指定服务消息,执行分步骤D309;如果不是指定服务消息,执行分步骤D310;
D309. 根据各子系统发送的心跳数据包中的负载状况信息,在服务识别码ID与请求服务的服务识别码Service ID相同的子系统中选择负载最轻的子系统,将服务处理请求消息转发给该负载最轻的子系统,然后执行分步骤D312;
D310. 判断服务处理请求消息中的请求服务的要连接的分发器模块网际协议IP地址是否存在;如果存在,将服务处理请求消息转发给所述要连接的分发器模块网际协议IP地址对应的子系统,然后执行分步骤D312;如果不存在,执行步骤D311;
D311. 返回错误代码;
D312. 结束服务处理请求消息转发。
同现有技术相比较,本发明“以平台消息总线机制实现子系统间信息交互的方法”的技术效果在于:
本发明可以有效的降低系统的连接维度,减少各个子系统间的连接数量,简化了系统的配置;减少了开发人员在开发过程中为了创建连接,维护连接,连接配置管理所需要完成的重复开发工作。EPIC平台作为基础的系统承载功能,完成连接管理,消息分发,负载均衡,主备切换等企业级应用的抽象,能够为企业级的应用提供框架基础。EPIC平台在整个企业级应用的开发过程中,实现了模块级的复用,能够有效的提高产品的研发效率。
具体实施方式
以下结合附图所示实施例作进一步详述。
本发明通过平台数据总线的模式,抽象出了一般企业级信息化应用中必须涉及到的几个环节,我们称之为EPIC(Enterprise Platform for Information Constructor,企业信息构建平台),通过EPIC的实施,实现了一些上层应用所应该包含的基础功能,简化了上层应用的开发模式,使开发人员不用再关心一些基础功能的实现,将开发重心放在了具体业务的实现上。本发明提出一种以平台消息总线机制实现子系统间信息交互的方法,基于包括至少一个客户端,以及至少一个服务器端的网络系统;尤其是,
所述方法在网络系统内建立一个企业信息构建平台 Enterprise Platform for Information Constructor;该企业信息构建平台EPIC包括分别设置在各服务器端和客户端的消息处理层模块,以及借助传输控制协议Transmission Control Protocol/用户数据报协议User Datagram Protocol与各消息处理层模块实现数据传输的分发器模块;所述企业信息构建平台EPIC按照以下步骤完成各子系统间的信息交互,
A. 系统按照配置文件完成系统运行状态初始化;
B. 所述各子系统借助各自的消息处理层模块与分发器模块建立连接,并以服务的方式分别向企业信息构建平台EPIC注册;
D. 已注册的子系统借助消息处理层模块发送的服务处理请求消息,所述分发器模块根据服务处理请求消息向各已注册的子系统转发服务处理请求消息,实现在子系统间建立信息交互。
如图3所示,EPIC平台的实现内容在分层中,定义为:消息处理层,数据链路层以及网络连接层。其中消息处理层为客户/服务端的寄生层,通常通过DLL实现,实现了平台的通讯规范,将应用消息按照EPIC平台规范实现消息的封装,对接收的消息进行完整性判断和消息的解封,将应用层消息提交上层应用进行处理,同时能够实现平台心跳消息的发送,判断与平台系统服务的连接状态;数据链路层和网络连接层属于EPIC平台的系统服务,其实现方式为系统平台分发器,为客户/服务端连接进行消息的分帧处理以及连接管理与消息分发操作。
也就是,所述消息处理层模块是分别寄生于各自对应的服务器端和客户端的寄生层模块,用于对要发送的来自服务器端或者客户端的应用层消息实施封装处理,对服务器端或者客户端的应用层要接收的消息实施解包处理;所述分发器模块包括数据链路层模块和网络连接层;所述数据链路层用于完成对来自消息处理层模块的数据的分帧处理,确认接收和发送数据完整性验证;所述网络连接层完成网络物理连接初始化,按照数据链路层的要求完成数据的传输控制协议Transmission Control Protocol/用户数据报协议User Datagram Protocol传输、完成网络物理连接管理。
本发明所述子系统的实际体现形式可以是网络模块,还可以是一组网络组件。本发明实现了不同模块,组件,子系统间的数据交互与传递。实现了消息的群发,组播,定点转发以及服务转发消息类型。通过心跳模式实现独立模块的注册,解注册与连接管理。通过心跳包传递应用的负载情况给EPIC平台,平台实现负载均衡处理。通过主备服务之间的状态判断,判断模块的可用性,平台实现了主备的热切换。以下将详述上述功能实现方案。
为保证系统准确及时更新平台连接情况,所述步骤A包括如下分步骤,
A11. 系统按照配置文件完成系统运行状态初始化,所述系统运行状态初始化包括设置心跳数据包发送周期;
那么在步骤B与步骤D之间还包括如下步骤,
C. 完成步骤B的已经注册的各子系统借助各自的消息处理层模块,按照分步骤A11设置的心跳数据包发送周期,每间隔一个心跳数据包发送周期分别向分发器模块发送心跳数据包;如果分发器模块在N个心跳数据包发送周期内未收到来自子系统的消息处理层模块的心跳数据包,所述分发器模块取消该子系统的注册。所述N=3。
关于各子系统的注册过程,EPIC平台中,每个具有多个功能集合的服务,需要进行负载均衡,容余备份的子系统,都可以以服务的方式注册到EPIC平台中。注册时,寄生层,即客户/服务端平台通讯封装模块应用从配置文件中获得相应的服务识别码Service ID以及要连接的分发器IP地址和端口信息。通过TCP/UDP方式,与分发器的服务端口建立SOCKET连接,寄生层封装注册消息体,将携带Service ID以及寄生层所在服务器IP信息的注册消息发送给分发器。分发器收到注册消息报文后,判断该注册是否属于重复注册,对于已经同一台IP的机器再次注册同样的Service ID,判为重复注册,直接刷新连接池中的内容即可。系统再判断Service ID是否已经存在,对于首次注册的服务,系统认为其为主用服务,否则系统认定其为备用服务。分发器将服务保存至连接池中,并刷新其心跳信息,将注册返回消息发送回寄生层。寄生层根据注册结果设定决定子系统的行为模式,即主用或者备用服务,并结束注册流程,准备进入心跳发送状态。
注册消息体中,包含了系统的Service ID,系统IP信息,用于将子系统信息提供给分发器。注册消息体原型参考如下:
typedef struct regist_msg
{
unsigned long service_id; //系统注册服务ID
char service_ip[16]; //系统IP地址信息
unsigned char encrypt_type; //消息发送加密类型
……
} REG_MSG;
本发明优选实施例通过以下方案实现上述功能,所述步骤B包括如下分步骤,如图4所示,
B21. 子系统的消息处理层模块从该子系统的配置文件中获取所述子系统提供的服务的服务识别号Service ID,以及该服务要连接的分发器模块网际协议IP地址和端口信息,并封装成注册消息体数据包;
B22. 步骤B21所述子系统依据注册消息体数据包中的服务要连接的分发器模块网际协议IP地址和端口信息,依据传输控制协议TCP/用户数据报协议UDP与分发器模块的相应端口建立套接字SOCKET连接,并将所述注册消息体数据包发送至分发器模块;
B23. 分发器模块根据分步骤B22发送的注册消息体数据包,将所述子系统的服务存储至所述连接池中;
B24. 分发器模块将注册返回消息回传给所述子系统的消息处理层模块。
为实现主备子系统注册,所述分步骤B23还进一步包括以下分步骤,
B2311. 分发器模块根据分步骤B22发送的注册消息体数据包中的所述服务要连接的分发器模块网际协议IP地址,判断该分发器模块要连接的网际协议IP地址是否与在连接池中已注册服务的要连接的分发器模块网际协议IP地址相同;如果相同,分发器模块正常刷新连接池,执行分步骤B2313;如果不相同,执行分步骤2312;
B2312. 分发器模块根据分步骤B22发送的注册消息体数据包中的服务识别码Service ID,判断该服务识别码Service ID是否与在连接池已经注册的服务的服务识别码Service ID相同;如果不相同,将分步骤B22发送的注册消息体数据包对应的服务的子系统在连接池存储为该项服务的主用子系统,执行分步骤2314;如果相同,将分步骤B22发送的注册消息体数据包对应的服务的子系统在连接池存储为该项服务的备用子系统,执行分步骤2315;
B2313. 将注册返回信息设置为重复注册信息;
B2314. 将注册返回信息设置为主用子系统注册信息;
B2315. 将注册返回信息设置为备用子系统注册信息。
子系统通过心跳的方式与平台保持连接状态,平台分发器在系统连接池中记录每一个注册到平台上的会话信息,当子系统的心跳到达后,分发器刷新在连接池中的会话信息,并更新各个子系统的负载状况。当子系统与平台分发器失联后,也就是心跳消息未能捕获,平台分发器负责将无效的子系统连接从系统连接池中移除。
在一个企业级的应用中,经常会遇到主用系统与备用系统并存的情况。一方面,主用系统承担了一些基础性的工作,例如网管中,主用服务负责完成系统设备的轮询操作,备用系统在主用系统正常工作的情况下,主要负责负担主用系统的负载,无需承担基础工作;另一方面,当主用系统发生异常中断后,备用系统需要能够完成切换工作,承担主用的基础工作,确保服务能够正常运行。
EPIC将企业级应用中经常需要解决的主备倒换问题通过平台的方式提供了一个解决方案。EPIC平台分发器能够通过注册的方式,将第一个接入系统平台的子系统作为主用服务,后续接入的同样Service ID的子系统作为备用子系统存在。当主用服务中断后,EPIC能够通过选举的方式,通常选举一个负载最轻的子系统,在其他备用服务中,找到一个新的主用服务子系统,并通知到相应的备用子系统升级为主用子系统。
本发明还可以通过心跳数据包实施传送子系统负载情况,A21. 系统按照配置文件完成系统运行状态初始化,所述系统运行状态初始化包括设置心跳数据包发送周期;
那么在步骤B与步骤D之间还包括如下步骤,
C21. 完成步骤B的已经注册的各子系统借助各自的消息处理层模块按照分步骤A21设置的心跳数据包发送周期,每间隔一个心跳数据包发送周期分别向分发器模块发送心跳数据包;所述心跳数据包包括子系统的负载状况信息;
C22. 如果分发器模块在N个心跳数据包发送周期内未收到来自子系统的消息处理层模块的心跳数据包,执行分步骤C23至C27,
C23. 分发器模块判断所述子系统是主用子系统还是备用子系统;如果是主用子系统执行分步骤C24至C26;如果是备用子系统,执行分步骤C27;
C24. 在连接池中查找所述主用子系统对应的服务在连接池中是否存在备用子系统,如果存在备用子系统,执行分步骤C25;如果不存在备用子系统,执行分步骤C26;
C25. 所述分发器模块在连接池中删除所述主用子系统的对应的服务,并且根据各备用子系统发送的心跳数据包中的负载状况信息,选择负载最轻的备用子系统修改设置为主用子系统;
C26. 所述分发器模块在连接池中直接删除所述主用子系统的对应的服务;
C27. 所述分发器模块在连接池中直接删除所述备用子系统的对应的服务。
如图5所示,分发器为了维持与每一个服务网络层连接,必须通过心跳的方式获得每一个已经注册成功的子系统服务模块的连接确认。子系统的寄生层模块会定期的给分发器发送心跳数据包。分发器收到心跳数据包后,在连接池中刷新对应的连接信息,确认连接维持。分发器有独立的线程检查系统连接池中的连接,超过3个心跳周期没有收到子系统的心跳信息,分发器认为连接已经中断,将连接从连接池中移出,子系统寄生层必须再次注册才能继续提供服务。
寄生层模块发送的心跳数据除了提供连接确认以外,还提供寄生层所在服务器及其应用的负载信息,分发器通过心跳同时能够获得寄生层所在应用及服务器的负载情况,当有调用寄生层Service ID的消息到达时,分发器能够判断当前所有同样服务,即Service ID相同的负载状态,选择一个轻量级的负载服务进行消息处理。
寄生模块通过以下消息参数判断寄生层所在服务器的负载状况:
服务器的CPU消耗情况;
服务器的I/O读写消耗情况;
服务器的内存消耗情况;
系统创建的连接数量情况
与应用相关的负载情况
寄生层通过注册回调函数的方式,由应用提供负载的判断,允许应用根据自身的运行情况,例如空闲线程数量,应用自身资源消耗情况等等,做出负载的判断,将负载情况结合当前计算机操作系统运行状况一起提交给EPIC平台分发器。寄生层通过加权的方式对上述负载进行计算,得到系统的负载加权平均值作为服务的负载判断,当有新的服务请求消息到达时,根据系统中所有相同服务的负载状况作出消息分发的选择。EPIC平台允许应用对负载状况做出自定义的判断。
回调函数的注册原型请参考:
typedef int _stdcall(*FRegistCallBack)(int( *GetAppLoad)());
分发器得到应用发送的服务处理请求消息,需要将消息发送给相应的子系统进行后续处理。应用在发送服务处理请求消息时,并不能确定所请求的服务存在,也不知道所请求的服务所在的IP地址信息,需要通过EPIC平台分发器来定位服务的会话,通过EPIC平台来确定最合适处理的服务,也就是负载最轻的服务,来进行后续消息处理工作。
EPIC平台支持多种不同类型的消息机制,需要处理的消息类型包括:
广播消息
对所有注册在平台上的子系统提供消息转发,除了发送者以外,所有在平台上注册的子系统均可收到广播消息。该类消息没有返回,平台发送完成后不做等待。
组播消息
该类型的消息在消息体中包含了Service ID,只有与该服务ID匹配的子系统能收到平台转发的消息。主要用于一类服务的消息广播。该类消息没有返回,平台发送完成后不做等待。
指定服务消息
该类型的消息在消息体中包含了Service ID,平台分发器根据当前注册在平台中该服务识别码Service ID匹配的子系统的负载状况进行消息转发。该类型的消息有标志位判断是否子系统会有返回,缺省认为有返回,分发器根据标志位判断是否需要等待,如果有返回消息,平台分发器等待对端子系统的返回,并将返回消息回送给消息发送者。
定点消息
该类型消息包含Service ID,同时该类型消息中包含了指定子系统的IP地址,平台将定点消息发送给指定IP的以及Service ID的子系统进行后续处理。该类型的消息有标志位判断是否子系统会有返回,缺省认为有返回,分发器根据标志位判断是否需要等待,如果有返回消息,平台分发器等待对端子系统的返回,并将返回消息回送给消息发送者。
如图6所示,综合上述方案本发明还支持多重消息传播方式,所述步骤A包括如下分步骤,
A31. 系统按照配置文件完成系统运行状态初始化,所述系统运行状态初始化包括设置心跳数据包发送周期;
那么,所述步骤B包括如下分步骤,
B31. 子系统的消息处理层模块从该子系统的配置文件中获取所述子系统提供的服务的服务识别号Service ID,以及该服务要连接的分发器模块网际协议IP地址和端口信息,并封装成注册消息体数据包;
B32. 步骤B21所述子系统依据注册消息体数据包中的服务要连接的分发器模块网际协议IP地址和端口信息,依据传输控制协议TCP/用户数据报协议UDP与分发器模块的相应端口建立套接字SOCKET连接,并将所述注册消息体数据包发送至分发器模块;
B33. 分发器模块根据分步骤B22发送的注册消息体数据包,将所述子系统的服务存储至所述连接池中;
B34. 分发器模块将注册返回消息回传给所述子系统的消息处理层模块。
所述步骤C包括如下分步骤,
C31. 完成分步骤B31至B34的已经注册的各子系统借助各自的消息处理层模块按照分步骤A31设置的心跳数据包发送周期,每间隔一个心跳数据包发送周期分别向分发器模块发送心跳数据包;所述心跳数据包包括子系统的负载状况信息;如果分发器模块在N个心跳数据包发送周期内未收到来自子系统的消息处理层模块的心跳数据包,所述分发器模块取消该子系统的注册。所述N=3。
所述步骤D包括如下分步骤,
D301. 已注册的子系统借助消息处理层模块发送的服务处理请求消息,所述服务处理请求消息包括请求服务的服务识别码Service ID、请求服务的要连接的分发器模块网际协议IP地址和消息转发机制信息;该消息转发机制包括广播消息、组播消息、指定服务消息和定点消息;
D302. 分发器模块判断服务处理请求消息是否合法;如果合法,执行以下分步骤D33至D3;如果不合法,直接执行分步骤D311;
D303. 判断消息转发机制信息是否是广播消息;如果是广播消息,执行分步骤D304;如果不是广播消息,执行分步骤D305;
D304. 将服务处理请求消息转发给除了发送该服务处理请求消息子系统之外的所有已注册的子系统,然后执行分步骤D312;
D305. 在已经注册的子系统中查找是否存在子系统的服务识别码Service ID与所述服务处理请求消息的请求服务的服务识别码Service ID相同;如果存在,执行步骤D306;如果不存在,执行步骤D311;
D306. 判断消息转发机制信息是否是组播消息;如果是组播消息,执行分步骤D307;如果不是组播消息,执行分步骤D308;
D307. 将服务处理请求消息转发给子系统的服务识别码ID与请求服务的服务识别码Service ID相同子系统,然后执行分步骤D312;
D308. 判断消息转发机制信息是否是指定服务消息;如果是指定服务消息,执行分步骤D309;如果不是指定服务消息,执行分步骤D310;
D309. 根据各子系统发送的心跳数据包中的负载状况信息,在服务识别码ID与请求服务的服务识别码Service ID相同的子系统中选择负载最轻的子系统,将服务处理请求消息转发给该负载最轻的子系统,然后执行分步骤D312;
D310. 判断服务处理请求消息中的请求服务的要连接的分发器模块网际协议IP地址是否存在;如果存在,将服务处理请求消息转发给所述要连接的分发器模块网际协议IP地址对应的子系统,然后执行分步骤D312;如果不存在,执行步骤D311;
D311. 返回错误代码;
D312. 结束服务处理请求消息转发。
显然,上述主备切换方案的步骤也可以插入上述消息转发方案的各步骤中,主要是分步骤C31中,实现有机结合,完成本发明所述EPIC平台的所有功能。