首页 > 其他 > 详细

短报文消息发送的模块设计实现

时间:2017-09-01 21:04:35      阅读:268      评论:0      收藏:0      [点我收藏+]

曾接触到一个报文发送的项目,这个项目的报文发送,虽有报文优先级,但却无按照报文优先级发送的功能。

因此,我便思考了一下,将自己的设计思路发出来,与大家共享。

首先明确的是,我所设想的报文发送是基于 Redis的 List 数据存储结构。

报文有三个优先级:高、中、低;报文有两个类型:定时发送报文和普通发送报文。

这些报文按照优先级,存储到 high、midium、low的三个List中,以下间记为H、M、L;按照定时发送报文存储到 time(时间,精确到秒) List中,以下间记为T。

需要的线程及其所实现的功能:

定时队列报文获取线程: 获取LastTimeStamp及其之后5秒的报文,并设置LastTimeStamp为获取的最新时间戳,下个周期获取时,判断LastTimeStamp是否超过当前时间,若超过则为当前时间。          

普通队列报文获取线程: 优先获得高优先级队列中的,若获取的报文少于配置的数量,则获取中队列的以补上。

这两个线程获取报文均有一个上限配置。

这两个线程获取到报文后,等待wait,未获取到任何报文时,则sleep(1000)后再获取。

发送线程: 在每个发送周期(串行的),优先获取定时队列的报文,未获取到,则获取普通队列报文;发送。

回调线程: 若发送异常,回调报文状态变为异常。

定时处理异常线程:自动搜集当前时间之前的,发送异常的报文,根据(异常规则)判断报文是否可以再次发送,如果可发送,则根据优先级,放入 高、中、低的三个队列,否则不发送,并将状态置为发送失败。 这个线程使用LPUSH将报文放入对应的优先级,以便优先发送。

短报文消息发送的模块设计实现

原文:http://www.cnblogs.com/zixiaoguan/p/7465013.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!