本文以一个消息服务器居中,作为消息中间件来描述本系统的运行情况,同时帮助理解ActiveMQ的运行机制。
1.业务流程
ActiveMQ服务器负责数据同步。各地区程序负责将本地修改数据传输到ActiveMQ服务器中。中心端程序负责从ActiveMQ服务器上获取消息,并在中心端进行同步处理,同时将中心端提交数据同步到各地区在ActiveMQ服务器中的消息队列中去。具体业务流程如下:
地区端到中心端:地区端到中心段需要完成三种同步任务。1、疑误信息提交同步,地区端提出的疑误信息,提交到ActiveMQ服务器中的消息队列中。2、疑误信息处理结果同步,对疑误信息的处理结果(疑误、错误、正确)信息提交到ActiveMQ服务器中。3、更正信息同步,对更正的信息提交到中心端消息服务器中。以上三类同步数据,由中心端程序读取并进行同步处理。流程图如下:
中心端到地区端:完成疑误同步流程。中心端提交的疑误信息,由程序发送到ActiveMQ服务器上相应地区份的消息队列中。相应地区份地区端程序接收消息服务器中本地区消息队列中的信息,同步到本地区疑误信息库中。流程图如下:
2.运行机制
消息中间件ActiveMQ居中,负责消息传递。地区端到中心端传递消息,进行同步的过程如下:
1) 初始化与ActiveMQ消息中间件的连接。载入必须的类包,初始化连接对象,与ActiveMQ服务器地址建立连接,建立代号为report的消息队列。
2) 传递消息。地区端在处理流程中,将待发送的同步信息自含上ID信息,交由ActiveMQ的发送方法,传递给ActiveMQ服务器中的report消息队列。
3) 中心端接收消息。中心端的WEB程序,执行接收操作,从ActiveMQ服务器的report队列中接收消息,存储在本地消息队列或者持久化对象中。
4) 解析并进行处理。从接收到的消息中解析语句,执行SQL语句,在中心端的数据库中进行同步重做。
中心端到地区端传递消息,进行同步的过程如下:
1) 初始化与ActiveMQ消息中间件的连接。载入必须的类包,初始化连接对象,与ActiveMQ服务器地址建立连接,建立代号为report的消息队列。
2) 传递消息到各地区消息队列。中心端提出的疑误信息,由程序解析成同步消息,交由ActiveMQ的发送方法,传递给ActiveMQ服务器中各地区的消息队列中,如B地区的消息队列为message_b。
3) 各地区取回本地区队列消息。各地区端的WEB程序,执行接收操作,从ActiveMQ服务器的本地区对应队列中接收消息。存储在本地消息队列或者持久化对象中。
4) 对消息进行解析和处理。地区端解析中心端同步过来的消息,解析出其中的疑误信息,进入本地疑误信息处理流程管理数据库。
3.程序示例
下面以中心端到地区端同步功能为例,以伪代码形式来说明实现流程。
1) 中心端代码
//建立ActiveMQ发送类对象
QueueSend qs = new QueueSend();
//初始化与ActiveMQ的连接,并建立发送到A的消息队列
qs.init_n2p("message_a");
//发送同步消息到ActiveMQ服务器的队列中
qs.sendMessage(sql);
2) 地区端代码
//建立ActiveMQ接收类对象
QueueReceive qr = new QueueReceive();
//接收ActiveMQ服务器中,中心端发给A队列的消息
qr.receiveMessage("message_a");
//对消息进行重做同步
execute(sql);