短报文消息发送的模块设计实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了短报文消息发送的模块设计实现相关的知识,希望对你有一定的参考价值。
曾接触到一个报文发送的项目,这个项目的报文发送,虽有报文优先级,但却无按照报文优先级发送的功能。
因此,我便思考了一下,将自己的设计思路发出来,与大家共享。
首先明确的是,我所设想的报文发送是基于 Redis的 List 数据存储结构。
报文有三个优先级:高、中、低;报文有两个类型:定时发送报文和普通发送报文。
这些报文按照优先级,存储到 high、midium、low的三个List中,以下间记为H、M、L;按照定时发送报文存储到 time(时间,精确到秒) List中,以下间记为T。
需要的线程及其所实现的功能:
定时队列报文获取线程: 获取LastTimeStamp及其之后5秒的报文,并设置LastTimeStamp为获取的最新时间戳,下个周期获取时,判断LastTimeStamp是否超过当前时间,若超过则为当前时间。
普通队列报文获取线程: 优先获得高优先级队列中的,若获取的报文少于配置的数量,则获取中队列的以补上。
这两个线程获取报文均有一个上限配置。
这两个线程获取到报文后,等待wait,未获取到任何报文时,则sleep(1000)后再获取。
发送线程: 在每个发送周期(串行的),优先获取定时队列的报文,未获取到,则获取普通队列报文;发送。
回调线程: 若发送异常,回调报文状态变为异常。
定时处理异常线程:自动搜集当前时间之前的,发送异常的报文,根据(异常规则)判断报文是否可以再次发送,如果可发送,则根据优先级,放入 高、中、低的三个队列,否则不发送,并将状态置为发送失败。 这个线程使用LPUSH将报文放入对应的优先级,以便优先发送。
以上是关于短报文消息发送的模块设计实现的主要内容,如果未能解决你的问题,请参考以下文章