轻量级跨平台消息中间件的实现方法及系统的制作方法
【技术领域】
[0001] 本发明涉及计算机通信技术领域,特别涉及一种轻量级跨平台消息中间件的实现 方法及系统。
【背景技术】
[0002] 消息中间件(MOM,Message-orientedmiddle-ware)是一种利用高效可靠的消息 传递机制进行与平台无关的数据通信,并基于数据通信来进行分布式系统集成的软件。它 通过将信息以消息(该消息除包含了应用程序处理所需的数据外还应该包含其它成分,例 如消息的发送者、接收者,消息的一些控制信息)的形式,从一个应用程序传送到另一个或 多个应用程序。消息中间件在TCP/IP网络体系结构中处于应用层,网络应用程序建立在消 息中间件之上,实现各种分布式应用服务。
[0003] 在使用过程中,现有的消息中间件存在以下问题:
[0004] 1.嵌入了大量的第三方库,造成使用该消息中间件的应用程序变得体积臃肿,编 译速度变慢;
[0005] 2.通常对Windows和Unix支持较好,对Vxworks平台支持不足;
[0006] 3.大文件消息传输能力较差,报文传输的长度有限制;
[0007] 4.使用过程繁琐,消息中间件在通信过程中需要创建、保持和关闭连接,对于需要 频繁使用消息中间件的应用,需要不断重复这一过程,增加了开发者的负担。
【发明内容】
[0008] 有鉴于此,本发明提供一种轻量级跨平台消息中间件的实现方法及系统。
[0009] -种轻量级跨平台消息中间件的实现方法,包括如下步骤:
[0010] S1、配置路由表,路由表包括进程ID、IP地址、组播地址路由关系信息,消息中间 件根据路由表解析出消息转发控制规则;
[0011] S2、初始化应用进程,创建该进程通信所需要的相关资源;
[0012] S3、消息队列接收线程实现:调用消息队列接收函数,将消息队列接收线程阻塞, 如消息队列收到数据,将数据拷贝至进程专属缓冲区中,并改写消息队列"读"与"写"管道 状态;
[0013] S4、进程读取数据接口实现:利用P0SIX库的I/O复用Select函数,轮询消息队列 "写"管道、UDP通信Socket和TCP通信Socket,如收到数据则将数据拷贝至进程专属缓冲 区中,并改写消息队列"读"与"写"管道状态;
[0014] S5、进程发送数据接口实现:根据发送报文头中的发送进程ID以及预先配置的路 由表,判断通信发生在节点间还是节点内;根据发送报文长度,判断通信方式采用UDP还是 TCP;
[0015] S6、TCP组播线程池的实现:根据预先配置的路由表,解析组播地址中包括的IP地 址,创建TCP发送线程池,并通过TCP发送线程池完成多地址TCP报文发送的并行处理。
[0016] -种轻量级跨平台消息中间件的实现系统,包括如下模块:
[0017] 路由表配置模块,用于配置路由表,路由表包括进程ID、IP地址、组播地址路由关 系信息,消息中间件根据路由表解析出消息转发控制规则;
[0018] 进程初始化模块,用于初始化应用进程,创建该进程通信所需要的相关资源;
[0019]消息队列接收线程模块,用于调用消息队列接收函数,将消息队列接收线程阻塞, 如消息队列收到数据,将数据拷贝至进程专属缓冲区中,并改写消息队列"读"与"写"管道 状态;
[0020] 进程读取数据接口模块,用于利用P0SIX库的I/O复用Select函数,轮询消息队 列"写"管道、UDP通信Socket和TCP通信Socket,如收到数据则将数据拷贝至进程专属缓 冲区中,并改写消息队列"读"与"写"管道状态;
[0021] 进程发送数据接口模块,用于根据发送报文头中的发送进程ID以及预先配置的 路由表,判断通信发生在节点间还是节点内;根据发送报文长度,判断通信方式采用UDP还 是TCP;
[0022] TCP组播线程池模块,用于根据预先配置的路由表,解析组播地址中包括的IP地 址,创建TCP发送线程池,并通过TCP发送线程池完成多地址TCP报文发送的并行处理。
[0023] 本发明提供的轻量级跨平台消息中间件的实现方法及系统,具有如下优点:
[0024] 1)使用操作系统自带P0SIX库,而非依赖外部第三方库,实现了消息中间件的轻 量化;
[0025] 2)通过I/O复用及管道等技术封装消息队列、UDP、TCP等进程通信方式,屏蔽了以 上进程通信方式使用上的差异,实现了通信框架跨平台(Windows、Unix和Vxworks)使用以 及通信接口上的统一;
[0026] 3)使用预设路由表,控制消息转发规则,屏蔽了通信物理位置上的差异。用户只需 关心通信的内容,消息中间件可自动处理并选择通信策略,并发送到相应的目的地。
[0027] 保证了进行通信交互策略的透明性、平台的无关性。
【附图说明】
[0028]图1为本发明实施例的轻量级跨平台消息中间件的实现方法流程图;
[0029] 图2为图1中步骤S2的子流程图;
[0030]图3为本发明实施例的轻量级跨平台消息中间件的实现系统结构框图;
[0031]图4是图3中进程初始化模块的结构框图。
【具体实施方式】
[0032] 如图1所示,一种轻量级跨平台消息中间件的实现方法,包括如下步骤:
[0033]S1、配置路由表,路由表包括进程ID、IP地址、组播地址路由关系信息,消息中间 件根据路由表解析出消息转发控制规则。
[0034] 分布式系统中每个节点在应用本消息中间件时,预先编辑信息转发路由表,消息 中间件通过解析该路由表,明确系统中的进程与节点部署关系,明确组播地址配置情况。
[0035] 分布式系统中各节点的进程ID :
[0036]
[0037]
[0038] IP地址、组播地址路由关系信息:
[0039]
[0040] S2、初始化应用进程,创建该进程通信所需要的相关资源;
[0041] 可选地,如图2所示,所述步骤S2包括如下子步骤:
[0042] S21、初始化进程通信所需的缓冲区及缓冲区长度。
[0043] S22、创建消息队列的"读/写"管道以及相应的文件描述符。
[0044] 通过"读/写"管理标记消息队列接收或读取数据,将管道的文件描述符作为I/O 复用函数Select的参数;Select函数允许进程指示内核等待消息队列、UDP通信Socket、 TCP通信Socket中任意一个接收到数据,并仅在一个或多个事件发生或经过预先指定的时 间后才唤醒进程。
[0045] S23、创建节点间短报文通信所需的UDP通信Socket。
[0046] 分别创建UDP通信接收和发送Socket,并根据进程ID为每个进程分配唯一的端口 号,将接收Socket与接收端口号绑定。
[0047]S24、创建节点间短报文通信所需的TCP通信Socket。
[0048] 分别创建TCP通信接收和发送Socket,并根据进程ID为每个进程分配唯一的端口 号,将接收Socket与接收端口号绑定。
[0049] S25、创建消息队列接收线程。
[0050] 创建一个并发性线程,用于消息队列接收数据。
[0051] S3、消息队列接收线程实现:调用消息队列接收函数,将消息队列接收线程阻塞, 如消息队列收到数据,将数据拷贝至进程专属缓冲区中,并改写消息队列"读"与"写"管道 状态。
[0052] S4、进程读取数据接口实现:利用P0SIX库的I/O复用Select函数,轮询消息队列 "写"管道、UDP通信Socket和TCP通信Socket,如收到数据则将数据拷贝至进程专属缓冲 区中,并改写消息队列"读"与"写"管道状态。
[0053] 可选地,所述步骤S4包括:
[0054] 分配一个描述字集,并将描述字集初始化。
[0055] 将"读"管道文件描述符、UDP通信Socket句柄、TCP通信Socket句柄加入到描述 字集;使用Select函数轮询描述字集