飞狐.net

人的每一步行动,都在书写自己的历史
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

分布式系统数据传输的解决方案之二

Posted on 2007-01-23 16:22  飞狐时代  阅读(1292)  评论(1)    收藏  举报

开发平台:VS.Net

数据库版本:Oracle 9i

案例:省公安厅与各地市局的执法与监督信息系统,是分布式系统的典型案例。

 描述:由于省厅数据库与地市数据库分别存储在不同的服务器上,即省厅和市局均有自己的Web服务器及数据库服务器,由于市局需要增加一项功能,即在页面上查询全省的嫌疑人,这就要求需要将市局数据库的嫌疑人资料同步到省厅的数据库中,以保证资料的完整性。同时,要求做到传输的定时运行,或自定义实时监听修改的数据完成即时同步运行。

 在前一篇文章里,我写了关于分布式系统数据传输的解决方案,考虑各种方案的优劣,最后决定以Windows Form+Web Service来实现,经过进一步的探讨,发现还有一种方案,也是非常不错的选择,那就是使用MSMQ来实现。

 MSMQ即Microsoft  Message Queue,在各种.net分布式的文章中是这样介绍的:

 MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。

 我整理了一下思路,由于要访问数据库来进行同步,所以大体步骤是这样的:

1)     程序分为客户端和服务端,由客户端发送数据,而服务端负责接收数据;

2)      要发送的数据源可以自定义,比如我要发送一个案件信息表,则就取案件信息形成发送的数据。所以发送时,需要建立一个可以序列化的类,由于每个表的列是不确定的,则类的属性也是不确定的,这样序列化时就不能将属性写死。所以可以使用集合,即创建自己的集合类,实现ICollection接口,比如ArrayList,SortedList等。这样就要求需要将集合类序列化。具体技术细节我以后的文章会讲到。

3)      集合类建立后,我们就可以根据设置动态增加数据源到集合里,然后序列化这个集合类,形成Object,由MSMQ的发送功能来完成发送。

4)      在服务端接收时,我们再将这个对象反序列化,取出集合里的记录,更新到目的地的数据库里。

5)      以上是功能实现部分,另外,这个程序应该有Windows form的界面来实现自定义的一些设置,并可以结合Windows service来实现定时或实时传输。

综上所述,由Windows forms+MSMQ+Windows Service的组合,也是分布式系统数据传输的一种较好的方案。当然,微软自己就有专业的数据传输软件,如BizTalk Server,不过那是要付出Money的,呵呵。。。

飞狐.net·书写程序员的历史·创建于2006年12月
Copyright 2005 Silver fox© 飞狐.net All Rights Reserved.