专利名称:短信发送方法和用于发送短信的系统的制作方法
技术领域:
本发明涉及网络通信技术,更为具体而言,涉及一种短信发送方法和用于发送短信的系统。
背景技术:
传统的短信发送采用轮询数据库的方式,即接收到短信发送请求后,将短信写入到数据库待发送表中等待发送,发送线程轮询数据库的待发送表将可以发送的短信读取出来并发送。随着业务的快速增长,当短信发送量非常大的时候,待发送表的数据量也会快速增长,加上大量的轮询数据库的操作,造成数据库系统资源使用率非常高,短信发送效率降低。
发明内容
针对上述技术问题,本发明提供了一种短信发送方法和用于发送短信的系统。一方面,本发明提供了一种短信发送方法包括:接收消息生产者产生的待发送短信;根据短信类型将所述待发送短信写入到多个队列模块,每一个所述队列模块包括内存链表、读取缓冲区以及数据库表;根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送。
另一方面,本发明提供了一种用于发送短信的系统包括:入队列接口模块,用于接收消息生产者产生的待发送短信并根据短信类型将所述待发送短信写入到多个队列模块;多个队列模块,所述多个队列模块中的每一个队列模块包括内存链表、读取缓冲区以及数据库表;出队列接口模块,用于根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送。通过实施本发明,多队列模式减少了待发送表的数据量,提高操作待发送表的效率;使用多队列大缓冲的机制,大大减少了对数据库的操作;不同的优先级使用不同的队列使不同优先级的短信的发送速度可控。综上,采用本发明技术方案,极大地降低了数据库的资源使用率,提高了短信的发送效率,同时保障了高优先级短信的时效性。
图1是根据本发明一种实施方式的短信发送方法的流程图;图2是根据本发明另一实施方式的图1中步骤S200的流程图;图3是根据本发明另一实施方式的图2中步骤S204的流程图4是根据本发明一种实施方式的用于发送短信的系统的框图;图5是图4所不系统的队列|旲块的不意图;图6是根据本发明实施方式的队列模块的状态变化示意图。
具体实施例方式为了便于理解本发明技术方案的各个方面、特征以及优点,下面结合附图对本发明进行具体描述。应当理解,下述的各种实施方式只用于举例说明,而非用于限制本发明的保护范围。参考图1,图示了根据本发明一种实施方式的短信发送方法流程。其中,所述短信发送方法包括:S100、接收 消息生产者产生的待发送短信。S200、根据短信类型将所述待发送短信写入到多个队列模块,每一个所述队列模块包括内存链表、读取缓冲区以及数据库表。其中,根据短信类型将所述待发送短信写入到多个队列模块,例如,根据短信时限要求,将时限要求急的短信写入优先级高的队列,将时限要求不急的短息写入优先级低的队列。当然,本发明不局限于此,还可以根据短信其他类型写入队列,例如,将动态密码通知短信写入队列1、将资金变动短信写入队列2、将广告短信写入队列3,等等。S300、根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送。根据本发明实施方式,通过直接从内存链表读取待发送短信进行发送,避免了对数据库的直接操作,从而极大地降低了数据库的资源使用率,提高了短信的发送效率。在本发明的另一实施方式中,步骤S200中将所述待发短信写入到所述多个队列模块中的一个队列模块包括以下步骤:S201、确定该队列模块的内存链表是否满;S202、当所述内存链表不满时,将所述待发送短信直接写入到所述内存链表,并将其标记为已入列;S203、当所述内存链表已满时,将所述待发送短信只写入到数据库表中,并将其标记为未入列;S204、在所述内存链表有空位时将所述数据库表中未入列的待发送短信批量写入所述内存链表,以便于在步骤S300中被读取并发送。由此在发送短信时直接从内存链表读取待发送短信,而无需对数据库表进行频繁操作。优选地,步骤S202还包括将所述待发送短信直接写入到所述内存链表的同时还将所述待发送短信写入到数据库表中,从而保证短信数据不会丢失。在本发明的另一实施方式中,当所述内存链表已满时步骤S203还将所述待发送短信只写入到数据库表中的同时还将待处理计数器加一。并且,S204包括:S2041、确定所述待处理计数器的值是否为零;S2042、当所述待处理计数器的值不会零时,读取线程查询所述数据库表,并根据待处理计数器批量地将未入列的待发送短信并入所述内存链表,同时修改待处理计数器的值;S2043、当所述待处理计数器的值为零时,则停止读取线程对所述数据库表的读取操作。优选地,所述根据待处理计数器批量地将未入列的待发送短信并入所述内存链表包括:读取线程先根据待处理计数器批量地将未入列的待发送短信从所述数据库表读取到所述缓冲区,然后从所述缓冲区将所述待发送短信读取到所述内存链表。通过采用待处理计数器表示该队列是否有未入队列的待处理短信,如果有,才需要从待发送表中读取短信;如果没有,则不需要读取待发送表;因此,在大部分情况下都不需要从待发送表中进行读取操作,减少了很多数据库操作。在本发明的其他实施方式中,步骤S300根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送包括:按照预先配置的各个队列模块发送短信数量比例从各个队列模块读取待发送短信进行发送。 例如,假设用三个队列1,2,3优先级分别设为60,30,10,再假设发送线程每次从队列中读取的数目是100,则从各队列选取的数目如下:队列1:100*(60/(60+30+10))=60 条但此时队列I只有50条短信,所以只能取到50条,则发送线程还可以选取50条。队列2:50*(30/(30+10)=37 条队列2有100条短信,从其中取出37条队列3:13* (10/10) =13 条该机制可以保证当高优先级短信比较多时,优先发送高优先级的短信。因此,不同的优先级使用不同的队列使不同优先级的短信的发送速度可控。此外,本发明还提供了一种用于发送短信的系统,如图4所示,所述系统包括:入队列接口模块,用于接收消息生产者产生的待发送短信并根据短信类型将所述待发送短信写入到多个队列模块(图4中显示为队列1、队列2、……、队列η);多个队列模块,所述多个队列模块中的每一个队列模块包括内存链表、读取缓冲区以及数据库表,如图5所示;出队列接口模块,用于根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送。如图5所示,内存链表用于保存待处理的短信。数据库表可以把短信保存在数据库中,而读取缓冲区的作用是提高从数据库读取到内存链表的效率。其中,队列的工作状态如图6所示,如下:状态1:短信直接写入到队列,读取线程不工作;状态2:短信写入到数据库,读取线程将短信读入到读取到缓冲;状态3:短信写入到队列,读取线程将短信读入到读取到缓冲,交从缓冲写入队列中;其中,状态的变化产生相应的事件,并驱动相关的线程执行相应的动作;采用大队列机制,队列的绝大部分时间工作在状态1,极大地减少了数据库操作频率。在本发明的一种实施方式中,所述入队列接口模块将所述待发短信写入到所述多个队列模块中的一个队列模块包括:确定该队列模块的内存链表是否满;当所述内存链表不满时,将所述待发送短信直接写入到所述内存链表,并将其标记为已入列;当所述内存链表已满时,将所述待发送短信只写入到数据库表中,并将其标记为未入列,并且在所述内存链表有空位时将所述数据库表中未入列的待发送短信批量写入所述内存链表。优选地,当所述内存链表不满时,所述入队列接口模块将所述待发送短信直接写入到所述内存链表的同时还将所述待发送短信写入到数据库表中。在本发明另一种实施方式中,所述系统还包括待处理计数器(图中未示出),并且在当所述内存链表已满时将所述待发送短信只写入到数据库表中的同时还将待处理计数器加一。并且,所述入队列接口模块在所述内存链表有空位时将所述数据库表中未入列的待发送短信批量写入所述内存链表可以包括:确定所述待处理计数器的值是否为零;当所述待处理计数器的值不会零时,通过读取线程查询所述数据库表,并根据待处理计数器批量地将未入列的待发送短信并入所述内存链表,同时修改待处理计数器的值;当所述待处理计数器的值为零时,则停止读取线程对所述数据库表的读取操作。优选地,所述入队列接口模块根据待处理计数器批量地将未入列的待发送短信并入所述内存链表包括:通过读取线程先根据待处理计数器批量地将未入列的待发送短信从所述数据库表读取到所述缓冲区,然后从所述缓冲区将所述待发送短信读取到所述内存链表。在本发明的一种实施方式中,如图4所示,所述系统任选地还包括:
参数控制模块,用于在系统初始化时将参数读取到内存中并定时刷新替换以便于系统其他模块直接从所述内存读取参数,其中,作为例子,所述参数主要包括:队列大小:内存链表的最大值;读取缓冲大小:读取缓冲的最大值;队列优先级策略大小:控制队列发送速度;发送线程每次取数值:发送线程每次取数的最大值;监控参数阀值,等。在本发明的一种实施方式中,如图4所示,所述系统任选地还包括:监控模块,用于抽取系统其他模块的运行状态数据(例如,内存链表长度(条)待发送(条)队列流量(条/5分钟)平均排队时间(毫秒)总发送流量(条/5分钟)),在监控界面中展现所述运行状态数据,并且在运行状态超过预警值时在监控界面中报警。本领域技术人员应当理解,对于本发明要解决的技术问题而言,参数控制模块和监控模块是可选择的模块,二者可以同时存在,也可以二者择一设置于所述系统中。通过上述各种实施方式的描述可知,本发明的技术方案使用队列机制提高短信处理效率;使用多队列模式减少待发送表的数据量;使用优先级策略保障高优先级短信的实时性。此外,通过接口模块使队列模块能得到更合理、充分地使用,对入队列短信进行分类,对出队列短信进行优先级策略;采用参数模块可以供其他模块随时获取相关参数信息;通过监控模块随时监控各模块的运行状态。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件结合硬件平台的方式来实现,当然也可以全部通过硬件来实施。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是 个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
权利要求
1.一种短信发送方法,其特征在于,所述方法包括: 接收消息生产者产生的待发送短信; 根据短信类型将所述待发送短信写入到多个队列模块,每一个所述队列模块包括内存链表、读取缓冲区以及数据库表; 根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送。
2.如权利要求1所述的短信发送方法,其特征在于,将所述待发短信写入到所述多个队列模块中的一个队列模块包括以下步骤: 确定该队列模块的内存链表是否满; 当所述内存链表不满时,将所述待发送短信直接写入到所述内存链表,并将其标记为已入列; 当所述内存链表已满时,将所述待发送短信只写入到数据库表中,并将其标记为未入列,并且在所述内存链表有空位时将所述数据库表中未入列的待发送短信批量写入所述内存链表。
3.如权利要求2所述的短信发送方法,其特征在于,当所述内存链表不满时,将所述待发送短信直接写入到所述内存链表的同时还将所述待发送短信写入到数据库表中。
4.如权利要求2所述的短信发送方法,其特征在于,当所述内存链表已满时,将所述待发送短信只写入到数据库表中的同时还将待处理计数器加一。
5.如权利要求4所述的短信发送方法,其特征在于,在所述内存链表有空位时将所述数据库表中未入列的待发送短信批量写入所述内存链表包括: 确定所述待处理计数器的值是否`为零; 当所述待处理计数器的值不会零时,读取线程查询所述数据库表,并根据待处理计数器批量地将未入列的待发送短信并入所述内存链表,同时修改待处理计数器的值; 当所述待处理计数器的值为零时,则停止读取线程对所述数据库表的读取操作。
6.如权利要求5所述的短信发送方法,其特征在于,所述根据待处理计数器批量地将未入列的待发送短信并入所述内存链表包括: 读取线程先根据待处理计数器批量地将未入列的待发送短信从所述数据库表读取到所述缓冲区,然后从所述缓冲区将所述待发送短信读取到所述内存链表。
7.如权利要求1至6任意一项所述的短信发送方法,其特征在于,根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送包括: 按照预先配置的各个队列模块发送短信数量比例从各个队列模块读取待发送短信进行发送。
8.一种用于发送短信的系统,其特征在于,所述系统包括: 入队列接口模块,用于接收消息生产者产生的待发送短信并根据短信类型将所述待发送短信写入到多个队列模块; 多个队列模块,所述多个队列模块中的每一个队列模块包括内存链表、读取缓冲区以及数据库表; 出队列接口模块,用于根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送。
9.如权利要求8所述的系统,其特征在于,所述入队列接口模块将所述待发短信写入到所述多个队列模块中的一个队列模块包括: 确定该队列模块的内存链表是否满; 当所述内存链表不满时,将所述待发送短信直接写入到所述内存链表,并将其标记为已入列; 当所述内存链表已满时,将所述待发送短信只写入到数据库表中,并将其标记为未入列,并且在所述内存链表有空位时将所述数据库表中未入列的待发送短信批量写入所述内存链表。
10.如权利要求9所述的系统,其特征在于,当所述内存链表不满时,所述入队列接口模块将所述待发送短信直接写入到所述内存链表的同时还将所述待发送短信写入到数据库表中。
11.如权利要求9所述的系统,其特征在于,所述系统还包括待处理计数器,并且在当所述内存链表已满时将所述待发送短信只写入到数据库表中的同时还将待处理计数器加一 O
12.如权利要求11所述的系统,其特征在于,所述入队列接口模块在所述内存链表有空位时将所述数据库表中未入列的待发送短信批量写入所述内存链表包括: 确定所述待处理计数器的值是否为零; 当所述待处理计数器的值不会零时,通过读取线程查询所述数据库表,并根据待处理计数器批量地将未入列的待发送短信并入所述内存链表,同时修改待处理计数器的值; 当所述待处理计数器的值为零时,则停止读取线程对所述数据库表的读取操作。
13.如权利要求12所述的系统,其特征在于,所述入队列接口模块根据待处理计数器批量地将未入列的待发送短信并入所述内存链表包括: 通过读取线程先根据待处理计数器批量地将未入列的待发送短信从所述数据库表读取到所述缓冲区,然后从所述缓冲区将所述待发送短信读取到所述内存链表。
14.如权利要求8至13任意一项所述的系统,其特征在于,所述出队列接口模块根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送包括: 按照预先配置的各个队列模块发送短信数量比例从各个队列模块读取待发送短信进行发送。
15.如权利要求8至13任意一项所述的系统,其特征在于,所述系统还包括: 参数控制模块,用于在系统初始化时将参数读取到内存中并定时刷新替换以便于系统其他模块直接从所述内存读取参数。
16.如权利要求8至13任意一项所述的系统,其特征在于,所述系统还包括: 监控模块,用于抽取系统其他模块的运行状态数据,在监控界面中展现所述运行状态数据,并且在运行状态超过预警值时在监控界面中报警。
全文摘要
本发明公开了一种短信发送方法和用于发送短信的系统,包括入队列接口模块,用于接收消息生产者产生的待发送短信并根据短信类型将所述待发送短信写入到多个队列模块;多个队列模块,其中每一个队列模块包括内存链表、读取缓冲区以及数据库表;出队列接口模块,用于根据优先级策略直接从各个队列模块的内存链表读取待发送短信并进行发送。通过实施本发明,多队列模式减少了待发送表的数据量,提高操作待发送表的效率;使用多队列大缓冲的机制,大大减少了对数据库的操作;不同的优先级使用不同的队列使不同优先级的短信的发送速度可控。从而,极大地降低了数据库的资源使用率,提高了短信的发送效率,同时保障了高优先级短信的时效性。
文档编号H04W4/14GK103237296SQ20131013700
公开日2013年8月7日 申请日期2013年4月19日 优先权日2013年4月19日
发明者李震, 杨杰, 陈忠, 蓝洪波, 李志刚, 黄壮杰, 邓国宇, 缪尔宁, 陈岩, 刘柏清 申请人:中国建设银行股份有限公司