- · 《财讯 》栏目设置[06/28]
- · 《财讯 》投稿方式[06/28]
- · 《财讯 》征稿要求[06/28]
- · 《财讯 》刊物宗旨[06/28]
上海财经大学消息中心点亮智慧校园(2)
作者:网站采编关键词:
摘要:其中,步骤三是RabbitMQ 的发送确认过程。在此过程中,可能出现网络闪断、MQ Broker 端异常等情况,导致回送消息失败或者异常,因此需要发送方(生产者
其中,步骤三是RabbitMQ 的发送确认过程。在此过程中,可能出现网络闪断、MQ Broker 端异常等情况,导致回送消息失败或者异常,因此需要发送方(生产者)对消息进行可靠性投递,以保障消息不丢失。为此专门设计了轮询机制,设置定时任务,每5 分钟读取一次中间状态的消息(消息可以设置一个超时时间,比如超时1 分钟且“pushstatus=0”,也就是1 分钟的时间窗口内没有被确认的消息,才会被定时任务拉取出来),然后将中间状态的消息重新发送到MQ,称之为“Retry send 机制”。轮询程序的另外一个功能是定时比较源头与消息汇聚中心的数据差异,将差异数据再次写入消息汇聚中心(相比重新投递的定时任务,此任务的时间窗口应设置的较大,如一天内未成功写入的消息;执行时间间隔也比较长,如一个小时),称之为“Rewrite 机制”。因此本方案除了利用RabbitMQ 自身的可靠性机制(包括队列持久化、发送确认)之外,“Retry send 机制”与“Rewrite 机制”作为额外的保障措施,提供了更高的可靠性。
2.消息下发层
在消息下发层,通过调用各类发送渠道,包括校园服务门户(PC 与移动)、短信平台、微信平台、邮件平台等,将消息方便及时的推送给师生用户。
系统实现
下文主要针对消息汇聚层中的生产者(消息接口API)和消费者(轮询程序)的实现过程进行阐述。消息下发层以调用第三方程序接口为主,不是本方案的核心内容,故不再赘述。
1.生产者
通过分析实际的应用场景,定义了两种消息类型:提醒与待办,提醒是业务系统发送给用户的提示消息,具有“已读”、“未读”属性;待办则是需要用户办理的一类特殊提醒,具有“未办理”、“已办理”属性。基于消息类型的定义,对于提醒,API 提供了“提醒生成”与“提醒已读”两个操作;对于待办,API 提供了“待办生成”与“待办消除”两个操作。由于提醒在程序实现上与待办类似,所以下文仅描述待办API 的实现过程。
(1)待办生成API
待办生成API 程序在功能上主要实现了待办消息数据的落地以及将待办数据放入RabbitMQ 消息队列并更新推送状态。主要程序实现(java 代码)如下:
/*
*待办数据写入数据库表
*/try
{
String sql_insert = "insert into " + schema + ".TMP_TODOSERVICE(SEQ_ID, APP_ID, REFNO, MESSAGE_TYPE_CODE, TARGET_TYPE, TARGET_IDS, CONTENT,
URL, DO_STEP, CREATETIME, PUSHSTATUS, DOFLAG,PUSHSTATUS_2) " + "values(" + schema + ".SEQ_TMP.
NEXTVAL, " + app_id + ", '" + refno + "', '" + message_type_code + "', '" + target_type + "', '" + target_ids + "', '" + content+ "', '" + url + "', '" + do_step + "', sysdate, -1, 1, -1)";
st = ();
(sql_insert);
} catch (Exception e) {
();
int i = 2;
return i;
}
/*
*RabbitMQ 生产者,将待办数据放入
RabbitMQ 队列并更新推送状态
*/
JSONObject joTodo = new JSONObject();
("datatype", "push");
("app_id", (app_id));
("app_key", app_key);
("refno", refno);
("message_type_code", message_type_code);
("target_type", target_type);
("target_ids", target_ids);
("content", content);
("url", url);
("do_step", do_step);
Boolean result = ("task_queue_todo", ());
(2)待办消除API
消除待办API 程序在功能上主要实现了待办完成数据的落地(修改已写入数据库的待办的完成状态)、将待办数据放入RabbitMQ 消息队列并更新推送状态。主
要程序实现(java 代码)如下:
/*
*待办完成数据写入数据库表
*/
try
{
String sql_update = "update " + schema + ".TMP_TODOSERVICE set DOFLAG=0, DONETIME=sysdate " +"where APP_ID=" + app_id + " and REFNO='" + refno + "'";
st = ();
(sql_update);
} catch (Exception e) {
();
int i = 2;
return i;
}
文章来源:《财讯》 网址: http://www.caixunbjb.cn/qikandaodu/2021/0223/598.html
上一篇:媒体融合时代的财经新媒体运营思考
下一篇:加强财经管理创建节约型军营