通过消息队列进行数据交换

针对多个业务系统之间的数据交换,针对接口提供方式的不同,可以通过以下几种方式实现。

1.前置机。

2.Socket。

3.Web服务(WebService)。

4.消息队列

5.其它... 

如果不牵扯复杂的业务,如单条数据只交换一次,那么采用前置机方式,一方负责写入数据,另一方负责读取,读取数据后,直接将中间库中的数据删除,保证数据只传输一次,这样能够保障各自系统的独立运行,同时不影响其他系统做数据交换,只要前置系统稳定,就没有任何问题。

如果两个系统能够实时连接,两个系统都能同时稳定运行,不考虑服务器宕机等情况,采用Socket和Web都是比较方便的。但实际的运行情况是比较复杂的,有事,当需要进行数据交换时候,另一个系统正在维护,这时收不到数据,这种方式,通过前置机的方式实现没有问题,但是通过Socket和Web服务(WebService)就满足不了,这种情况可考虑通过消息队列实现。

一般数据交换比较小的系统,不考虑高并发,息队列选择一般的ActiveMQ和RabbitMQ都可以,其它消息队列也可以,就是我没有试验过,我们系统比较小,但实际测试过程发现,ActiveMQ容易数据,我们通过Android向PC发送数据,没有接收成功,但是平台自己给自己发都没有问题,这可能是ActiveMQ不稳定性的一种表现。

我们采用考虑应用管理系统和数据交换软件相互独立运行,如要有任何影响,在数据库设计时,我们在数据库中所有的数据表都增加了(ISUPLOAD int)字段,用于标记数据是否是(未同步)需要同步的数据,当数据添加入库,或被修改,把ISUPLOAD修改成0,如果同步完成后,我们把数据置为1,应用管理系统本身分三级布式结构,中间层数据及包含上传,同时对审核不通过的还需要回退,数据交换结构异常复杂,考虑将结构进一步清晰化,我们对数据库交换软件进行了重新设计,同时对ISUPLOAD字段进行了扩充,修改成了三种标志。

0--新数据

11--上报途中

12--上报完成

应用管理系统程序结构为dotnet C#开发的C/S结构程序,程序运行后,就开启线程了一个本地线程,负责检索本地需要同步的数据,然后将数据推送到消息队列中,推送完成,数据状态为(11),上级部门接收数据后,将数据写入本地库,同时发送数据到消息队列,上报端接收到数据后,跟新本地数据库,将数据更新为12,数据上传成功。

你可能感兴趣的:(通过消息队列进行数据交换)