码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-01 21:16:45      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:串行   优先级队列   indent   获取   超过   定时   功能   需要   项目   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

标签:串行   优先级队列   indent   获取   超过   定时   功能   需要   项目   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!