1、基于 MSMQ 和 XML 实现数据同步策略第 20 卷第 2 期河南工程学院(自然科学版)2008 年 6 月 JOURNALOFHENANINSTITUTEOFENGINEERINGVo1.20,No.2Jun.,2008基于 MSMQ 和 XML 实现数据同步策略田正军(河南工程学院计算机科学与工程系,河南郑州 450007)摘要:数据同步问题是研究分布式数据库的一个非常关键的技术问题 .本文在探讨了微软消息队列技术和可扩展标识语言技术工作原理的基础上,提出了一种利用微软消息队列和可扩展标识语言来实现数据同步的策略,并给出了该策略的详细实现过程.该策略可以实现信息安全可靠的传递,并且用户
2、能够在两个站点之间网络不连通的情况下进行通讯,确保数据库更新事务不丢失,从而为数据库的同步操作提供了保证.关键词:数据同步;微软消息队列;可扩展标识语言中图分类号:TP309.5 文献标识码:A 文章编号:1674330X(2008)02003303随着信息技术和网络技术的飞速发展,分布式数据库和分布式信息系统得到越来越广泛的应用,各个分布数据库和应用系统问的数据同步问题也随之凸显.目前,在分布式数据库领域,人们提出了许多方法来维护数据的一致性,但它们都有一定的适用局限性.因此,何种环境采用何种方法来维护数据一致性是研究分布式数据库的一个非常关键的技术问题.在分布式数据库系统中主要存在着两个问
3、题.其一,各分系统之间的通信问题.当各分系统相对独立时,他们之间的通信既要有网络保障同时又不能影响各分系统的正常运行;其二,数据格式问题.各分系统的数据格式可能会存在差异,尤其是在各分系统已经存在并正常运转的情况下所构建起来的分布式系统中,这个问题更加突出.分系统可能是在不同的时间由不同的人设计的,因此数据库的设计可能大相径庭.在这种情况下,数据交换应采取怎样的格式便成为了一个问题.很显然,要成功地构建一个分布式系统,必须要解决好这两个问题.本文将结合MSMQ 技术和 XML 技术 ,提出实现数据同步的一个解决方案.1MSMQ 简介消息队列技术是一种利用队列机制实现应用程序间通信的技术,它允许
4、应用程序以异步的,非实时的方式互相传递信息.相互通信的应用可以分布在一台机器上,也可以分布在相连接的网络上任何一个位置上.MSMQ(MicroSoftMessageQueue 微软消息队列)是微软的消息队列中间件产品,它是Windows2000 操作系统中消息应用程序的基础,也是用于创建分布式,松散连接的消息通讯应用程序的开发工具.这些应用程序可以通过不同种类的网络进行通讯,也可以与脱机的计算机通讯.它的实现原理是消息的发送者把自己想要发送的信息放人一个容器中(称之为 Message),然后把它保存至一个系统公用空间的消息队列(MessageQueue) 中,本地或者是异地的消息接收程序再从该
5、队列中取出发给它的消息进行处理.消息队列是异步的,一旦某个消息放人了消息队列,发送该消息的应用程序就可以转去做其他工作,而不必等待其他应用程序来读该消息.消息队列还允许脱机工作,也就是说即使某个应用程序还没有接入网络,也可以发送消息,一旦该应用程序重建了网络连接,该消息就可以进入消息队列 J.消息队列是十分可靠的技术,可以把消息队列存储在永久存储器中,当系统崩溃恢复运行时,可以重建有关的队列操作.MSMQ 是 Windows2O00server 操作系统自带的一个安装组件,用 Windows2O00 系统安装盘安装即可.收稿日期:20080606作者简介:田正军(1971 一),男,辽宁辽中人
6、,硕士,主要从事计算机网络技术研究?34?河南工程学院 (自然科学版 )2008 卑2XML 简介XML(eXtensibleMarkupLanguage 可扩展标识语言)是由 w3c(互联网联合组织 )于 1998 年 2 月发布的标准.它是 SGML 的一个简化子集,将 SGML的丰富功能与 HTML 的易用性结合到 Web 的应用中,以一种开放的自我描述方式定义了数据结构,在描述数据内容的同时能突出对结构的描述,从而体现出数据之间的关系.这样所组织的数据对于应用程序和人类都是友好的,可操作的,能最大限度地满足人们对日益增长的 Web 服务功能的需求.XML 是一种界定文本数据的简便而标准
7、的方法,与注重数据及其表达方式的 HTML 不同,XML 只关心数据本身.XML 的优势在于其数据可以被用户定义的,有语义的标记环绕,可在数据库中实现无损的存储,检索和修改等操作.只需简单地添加标记就可以描述它们所封装的信息,XML 的这种数据描述机制使得它成为一种在 Internet 上共享信息的强大途径.因为它是开放的,能够在不同的用户和程序之问交换数据,而不论其平台如何,所以 XML 作为信息的载体是再好不过的选择了.在目前以及可见的将来,XML 将在 Web 中扮演举足轻重的角色.3 利用 M 僵 Q 和 XML 实现数据同步假设在一个分布式数据库系统中存在着 A,B两个站点,现在使用
8、 MSMQ 和 XML 技术来实现 A站点与 B 站点之间的通信.实现内容:A 站点将自己要发送给 B 站点的信息封装成 XML 报文,然后将该报文作为消息通过网络发送到 B 站点的消息队列中,B 站点从消息队列中接收并解析处理该消息,整个过程如图 1 所示.A 站点 B 站点图 1 系统通信示意图Fig.1Theconnnunicationofthesystem下面分几个步骤来实现这一过程.第一步,把 A 站点要发送的信息封装成 XML报文.假设 A 站点在某一时刻监测到有对数据库LHXSDB 中 XueJiTable 表进行插入更新的一个事务:InsertIntoXueJiTableVal
9、ues(0705304008 李仪男河南信阳 413028198812115318,应用电子技术同时 A 站点与 B 站点约定采用以下 XML 报文格式(“/“表示后面的内容为注释).MessageTransactionsType/TransactionsType/事务操作的类型,有 Insert,Delete 和 Update 三类DataBaseName/DataBaseName/要更新的表所在数据库的名称Transactions/Transactions/要更新的事务TableName/TableName/要更新的表的名称Time/Time/更新事务的执行时间TransactionsPR
10、I/TransactionsPRI/更新事务的优先级/Message则此插入更新事务信息形成的 XML 报文为:MessageTransactionsTypeInsert/TransactionsTypeDataBaseNameLHXSDB/DataBaseNameTransactionsInsertIntoXueJiTableValuesf0705304008 李仪,男, 河南信阳413028198812115318,应用电子技术)/Transac.tionsTableNameXueJiTable/TableNameTime2007/09/0210:O0:O0/TimeTransaction
11、sPRIhigh/TransactionsPRI/Message对于单纯的 XML 文件,用记事本或其他文本编辑器编写即可,但问题是怎样在程序中动态生成XML 报文,可以利用文件对象模型 DOM(DocumentObjectMode1).DOM 是 Windows 操作系统提供的一个 COM 对象,利用 DOM 编程的使用方法与使用其他 COM 对象相同.在 VB 中使用 DOM 前,单击“ 工程“ 菜单 ,选取 MicrosoftXML3.0 或其他版本,再按确定按钮即可.至此,第一步宣告完成.第二步,将封装好的 XML 消息发送到 B 站点服务器的消息队列中.首先,为 B 站点创建一个接收
12、 A 站点消息的消息队列,其手工创建的方法如下.单击开始菜单,选择“程序 I 管理工具 I 计算机管理“, 进入计算机管理界面后,打开服务和应用程序,再打开消息队列,选中专用队列并右击.在弹出的菜单中选择新建专用队列,为新建的队列起一个第 2 期田正军:基于 MSMQ 和 XML 实现数据同步策略?35?名字,这里命名为 q,最后单击确定,队UgJ 建完成.创建完消息队列 q 后,需要从 A 站点向消息队列 q 发送消息,发送消息要使用 MSMQ 的编程接口MSMQAPI.MSMQ 有两种类型的 API.第一种是标准 c 语言 API,程序员必须在填充 API 所需的各种数据结构后才能以这些结
13、构作为参数调用 API 函数.第二种 API 是一组 COM 对象,程序员可以在支持 COM对象的各种语言中使用这些 COM 对象.这里我们使用第二种 API 即 COM 对象,这种方法比较常用且操作简便.在 VB 中使用 MSMQAPI 与使用其他 COM 对象一样,需要添加引用.具体的方法为单击“工程“菜单,选择“引用 “,然后选中 “MicrosoftMessageQueue2.0ObjectLibrary“确定即可.用 VisualBasic 代码实现发送消息如下 :DimqiAsMSMQQueueInfoSetqi=NewMSMQQueueInf0/gl 建一个新的Queuelnfo
14、 对象 qiqi.PathName=“125.219.0.3Myqueue“/设置队列路径名DimqAsMSMQQueueSetq=qi.open(MQSENDACCESS,MQDENYNONE)/创建一个新的消息队列对象 qDimmsgAsMSMQMessageSetmsg=NewMSMQMessage/创建一个新的消息对象 msgmsg.Label=“Application“/设置消息标签,可根据实际意义命名msg.Body=XMLFile/设置消息体msg.Sendq/发送消息q.Close/关闭队列在 MSMQ 中,消息体是以字节数组的形式存储.在此例子中,消息体是 XML 文件.至此
15、,第二步工作完成.第三步,B 站点实时接收 A 站点发来的消息,并做相应处理.关于接收队列的消息,需要考虑一个问题.我们可以定期或不定期地打开消息队列查看是否有消息到达,如果有则运行接收程序对消息进行处理;还可以写一个触发器程序,如果有消息到达程序会自动触发,这样一来就能保证及时处理,而且不用人为干预.在 Windows 的 XP 版和 2003 版中,提供了一个附属组件 msmqtrigger,该组件就是消息队列的触发器4.另外,Windows2000 用户可以免费从微软网站上下载,写一个消息处理程序(com 组件或 exe 程序)并在 msmqtrigger 中注册后,当消息到来时,由ms
16、mqtrigger 自动触发.现在,A 站点发送,B 站点接收的整个流程已经完成了,至于 B 站点发送,A 站点接收的逆向通信则完全雷同.4 结论总之,利用 MSMQ 和 XML 实现数据库同步,可以实现信息安全,可靠的传递,并且用户在两个站点之问的网络不连通的情况下也可以进行通讯,确保数据库更新事务不丢失,从而为数据库的同步操作提供了保证.参考文献1邵佩英.分布式数据库系统及其应用M.北京:科学出版社,2000.2清宏计算机工作室.XML 编程起步M.北京:机械工业出版社,2002.3李晓剑.消息队列中间件技术及 MSMQ 应用研究D.武汉:武汉理工大学,2002.4吴霜,郑海涛 .XML
17、在分布式数据同步中的应用研究J.现代计算机,2004,(3):7176.StrategyofDataSynchronizationRealizationBasedonMSMQXMLTIANZhengjun(DepartmentofComputerScience,HenanInstituteofEngineering,Zhengzhou450007,China)Abstract:Theproblemofthedatasynchronizationisacriticaltechnologicalproblemintheresearchofdistributeddatabase.Basedondis
18、cussingtheworkingprinciplesofMSMQtechnologyandXMLtechnology,astrategyhasbeenputforwardtoachievethedatasynchronizationbytakingadvantageofMSMQandXMLandthedetailachievementprocessofthisstrategyhasalsobeenrevealed,whichcantransmittheinformationsafelyandreliably.Besides.itpossiblefortheusertocommunicateundertheconditionofthedisconnectionbetweentwonodes.Thestrategymakessurethattheupdatetransactionisntlostandprovidesthepromiseforthesynchronousoperationofthedatabase.Keywords:datasynchronization;Microsoftnewslist;expandablemarkedlanguage