欢迎来到学术参考网

基于SMQ消息中间件的军事数据交换设计与实现

发布时间:2015-07-13 09:46
摘 要 本文重点介绍了基于消息中间件的一般特性,我们自行开发的SMQ消息中间件在分布式异构数据交换中的应用,以及在开发过程中,系统设计的关键技术实现。为今后军事数据的网络共享实现,提供了相关的技术支持。
关键字 SMQ;消息中间件;数据交换

1 问题的引入

SMQ消息中间件服务是数据库之间实现数据交换的核心部分,它主要通过接口与应用程序连接,它负责监听应用系统发出的对目的数据库管理的连接请求,分析应用系统的需求,根据应用系统对接口的调用访问目的数据库系统,并负责发送,和缓存文件消息,SMQ采用的是异步通信传输,支持多种接口调用。本文提到的SMQ消息中间件是在普通消息中间件基础上我们自行开发的中间件,本文主要结合项目,讨论了如何在军事数据交换中使用到的SMQ的关键技术实现。SMQ在整个系统中的结构如

图1 SMQ消息中间件在系统中的应用

2 系统实现的关键技术

2.1 采用异步传输机制

我们自己开发的SMQ消息中间件,主要是通过Tcp/ip协议实现数据传输,通过ip地址寻找目的服务器地址,只要有足够的时间使Tcp/ip保持联通状态,所传输的XML文件就发送给消息队列管理服务器,消息队列服务器将文件消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,发送和接收是异步的,发送者无需等待;二者的生命周期未必相同:发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信:对于一个消息可以有多个接收者。这两个应用可以在同一台机器上,也可以在由局域网或广域网所连接的不同机器上。如下图,是本文作者举的一个关于在项目开发中用到的P-T-P图例:

图2 SMQ消息中间件的P-T-P实现框架

2.2 SMQ采用多线程方式

线程是操作系统分配处理器时间的基本单元,线程都维护异常处理程序、调度优先级和一组系统用于在调度该线程前保存线程上下文的结构。应用系统与消息队列管理服务器,消息队列管理服务器与接收应用系统之间进行通信,必须尽可能快地对应用系统的需求作出反应,完成相关请求,并将请求快速返回,多线程是一种最为强大的技术。实际上,真正需要传输的数据大都属于多节点上的分布式异构数据。因此在SMQ上采用多个线程处理机制,其中每个线程对应处理一个用户的请求,其中重要包括以下:
1)服务器同时监听多个客户端对目的服务器的数据通信请求;
2)服务器与客户端的网络通信;
3)服务器对消息队列的管理。
这些线程的启动和停止,SMQ通过文件进行配置:
# “#”为注释行。其中udp-detector是网络通断线程信息,tcp-listener是TCP消息接收和发送线程信息,smq-user是用户调用接口线程。一般如果接收端口没有冲突的情况下,不用修改中的任何内容则可。

2.3 快速的软件开发模式

SMQ以DLL的方式向用户提供多个调用API接口函数和两个结构类型,用户可以调用这些接口和结构实现SMQ提供的创建和删除消息接收队列、发送消息、接收消息等功能,同时SMQ也支持通过java接口方式进行调用,为此,SMQ主要提供以下文件:,和 smq_user_
both.h, smq_dll.h,实现SMQ的接口函数管理:

表1 部分功能接口表
动态连接库接口名称
功能
格式
使用
接收队列创建
创建消息接收队列
SMQ_CreatQueue
在本地建立消息接收队列
接收队列删除
删除消息接收队列
SMQ_DeleteQueue
删除指定名称的接收队列和其中的所有消息
消息发送
处理来自用户进程的调用,将消息发送到指定队列
SMQ_SendMessage
将消息发送到指定队列
消息接收
从相应的接收队列中接受消息并将该消息从接收队列中删除
SMQ_RecvMessage
根据消息的实际大小,可以判断消息的存放位置:1)文件形式;2)缓冲区
接收队列清除
清除指定接收队列的消息
SMQ_ClearQueue
清楚指定队列和相关消息
接收队列查询
查询指定接收队列的相关信息
SMQ_QueryQueue
显示接收队列的相关信息
本地发送队列查询
查询本地所连接发送队列名称
SMQ_QuerySendQueue
显示本地所连接服务器的接收队列信息
接收队列列表查询
查看当前队列的下一个队列消息
SMQ_QueryQueueNext
显示接收队列的下一个队列信息
消息查看
查看接收队列中的消息内容
SMQ_PeekNextMessage
显示接收消息下一条消息的信息
服务器连接
通过主机信息连接到服务器
SMQ_Connect()
通过IP,port连接到服务器
断开服务器
断开与本地的服务连接
SMQ_Disconnect()
断开服务器连接
服务器连接状态判断
判断与本地服务器的连接状态
INT32 SMQ_isConnect()
判断本地与服务器的连接状态

2.4 适合军事数据库的分布和异构特点

目前的军事数据库系统基本上都是分布式异构数据库,主要存在(1)由源数据的数据库系统、军事训练模拟系统以及操作平台的不同,导致了系统异构,(2)来自与不同的数据管理软件(如:oracle 、SQL Sever等),(3)数据的存在模式异构等。基于这些数据的特点,在实现数据共享过程中,我们采用了具有跨平台,开放性强的XML语言,将需要传输的数据(文本、声音、图象等等)通过持久层统一映射成为XML文件。
SMQ消息中间件同样具备很强的跨平台能力,如图2,网络传输,我们主要采取了,TCP/IP协议,传输过程中,SMQ将XML文件封装成标准的IP包。这样的好处在于:
一是相当于对复杂多样的军事数据进行了加密;
二是在传输过程中我们采用了自己定义的数据格式,可以在大量的数据中找到特定条件的数据。而且在文件传输过程中,在消息队列管理服务器中,消息文件将根据时间优先级和特定的标识自动排序。如:发送接收消息时:
Sendfile 26.28.245.146 niu [mem|file] count:向指定服务器的名称为niu的接收队列发送不同类型的消息。
recvq niu count :将接收到的消息存入本地服务器的名称为niu的接受队列。其中的niu是根据调用创建队列接口:SMQ_CreatQueue创建的队列,在具体数据管理过程中,可以设置成相应单位名称,从而实现数据的有效传输,提高批量数据管理效率。

3 总结

随着各军兵种信息化水平的提高,相应的军事训练数据日益膨胀,消息中间件技术在实现分布式异构数据库系统之间的有效交换方面发挥的作用越来越突出,本文是作者在结合项目开发,探讨了消息中间件开发的技术实现,通过自己开发的SMQ消息中间件,实现了数据的安全,高效传输。在关于多节点群之间数据的订阅/发布式共享,提供一定的理论基础。

参考文献

[1](美)Didier Martin 等着. XML高级编程. 机械工业出版社, 2001.1
军事数据工程研究. 南京: 解放军理工大学工程兵工程学院, 2006.1
江苏系统工程学会《论文集》.江苏徐州,2006.11

上一篇:基于OpenGL的实验室用滑动变阻器的设计与实现

下一篇:基于Qt/Embedded的GUI移植及无线网络功能的开发