消息队列技术在短信通信中的应用

时间:2024-12-27 02:33:28 来源:作文网 作者:管理员

摘要:随着农业信息化的发展和国家“三农”扶持政策的推动,农信通平台的短信业务量迅猛增长,从农信通平台到互联网短信网关的通信成为系统发展的瓶颈,甚至产生了信息大量积压,严重影响到用户的感知。为解决此问题,我们采用微软消息队列技术(Microsoft Message Queue,MSMQ)实现平台和互联网短信网关之间的通信。本文主要论述该技术在农信通系统中的设计实现和实施效果。

关键词:微软消息队列MSMQ 短消息服务 互联网短信网关 短消息中心

1 概述

短消息服务以简单方便的使用功能受到大众的欢迎,除了大量使用的手机用户到手机用户的短信业务之外,从信息平台到手机用户的短消息服务也在快速发展,该类业务已成为广大用户获取信息的一种重要手段。

由于历史原因,旧版的农信通业务在短信发送和接收过程中,采用了同步通信机制。当消息发送时,需要等待接收方响应,此时发送进程被阻塞。如果接收方响应不及时,势必会影响发送方的发送速度。在通信量较小的情况,此种通信机制完全能满足业务的需求。然而,当通信量达到每天几百万需求时,这样的通信机制显得捉襟见肘了,出现信息送达延时、信息积压、记录锁等问题,严重影响到业务的发展。通过笔者对消息队列的研究和学习,在农信通系统中引入了消息队列技术。实现原理是:消息的发送者把自己想要发送的消息放入一个容器中,然后把它保存在系统公用空间的消息队列中,本地或者是异地消息接收程序再从该消息队列中取出它的消息进行处理。

2 技术方案

2.1 消息队列模块

依照中国移动点对点CMPP3.0协议,结合短信业务的个性化需求,设计了四个消息队列,分别是:①发送消息队列:保存由数据操作模块提供的数据,供短信发送模块使用。

②Response消息队列:当短信发送模块将信息发送

得到响应后,将该消息放入发送日志队列中,由数据操作模块处理。

③状态报告队列:当接收到用户状态报告时,将此状态报告放入状态报告队列中,由数据操作模块处理。

④MO消息队列:当接收到用户上行到短信网关的业务指令时,将业务指令信息放入MO队列,由数据操作模块处理。

2.2 数据操作模块

在本实施方案中,此模块主要进行两部分操作:

2.2.1 从数据库中读取数据

负责从数据库中批量读取系统中待发送的消息数据,放入待发送消息队列中,数据取出的同时从数据库中删除已取出的数据,避免重复读取。

读取数据采用实时或是间隔某个微小时间,判断发送消息队列中的消息量,当发送消息队列中消息量小于某个阀值时,主线程触发读取数据操作。

2.2.2 从Response消息队列、状态报告消息队列、MO消息队列取数据写入数据库

采用多线♂程方式,处理Response消息队列、状态报告消息队列、MO消息队列中的数据。消息队列中的数据根据其性质可以设置不同的优先级,为了保证用户上行指令的及时性,MO消息队列的优先级高于Response队列和状态报告消息队列。

Response消息队列:从短信网关接收到的响应包,当response为0时,表示短信网关正确接收消息,记录消息的发送日志。当response非0,表示短信网关接收数据失败,一般这样的情况给予3次发送机会,如果发送次数小于阀值,则该条消息的发送次数加1后重新写入数据库的待发送队列中。

2.3 短信发送模块

短信发送模块主要作用是将待发送队列中的信息发送到短信网关,并接收网关返回的响应信息、状态报告以及MO信息,原理如下:①创建多个发送线程,每一个线程创建一个与短信网关通信的socket连接,同时创建相应的多个接收线程和多个滑动窗口监控线程。

②每个发送线程首先判断滑动窗口容器中数据量,当数据量小于滑动窗口阀值时,从发送消息队列中取得待发送数据向短信网关发送,发送成功后将该信息置入滑动窗口容器中,并将全局计数器加1,否则该线程进行短暂的休息。

③接收线程实时接收短信网关传送过来的数据,接收线程接收到数据后,如果是Response响应,则根据消息内容与滑动窗口容器中数据进行匹配,如果匹配到,则将滑动窗口容器中该数据删除,放入Response消息队列,由数据处理模块进行处理。如果匹配失败则抛弃该数据;接收线程接收到状态报告,将信息存入状态报告消息队列中;接收线程接收到用户MO信息,将该信息存入MO消息队列中。Response消息队列、状态报告消息队ศ列、MO消息队☃列由❣数据操作模块进行处理。

④滑动窗口容器监控线程间隔性检测该容器中数据是否超时,如果超时,则该数据删除并放入发送日志队列同时为该数据置超时标志。

3 实施效果与优势

通过引入消息队列技术,在短信业务的数据通信中,每个连接的发送速度达到每秒60条左右。如果短信网关给一个短信类业务分配4个连接通道,那么业务的发送速度将达到每秒240条。完全能满足日发送600万(8*3600*

240,一天按8小时计算)的业务量需求。消息队列技术不仅能提高通信速度,还具备以下优势:

①MSMQ是一种分布式的开放技术,可以在服务端离线情况下工作,将消息临时保存在发送方的消息队列中,以后联机时再发送到接收方处理,避免了由于通信中断导致数据丢失现象,提高了通信的可靠性。

②由于是异步通信机制,无论是发送方还是接收方,都不用等待对方返回成功消息,就可以执行余下的代码,大大提高了事务处理能力。

4 结束语

本文讨论了微软消息队列在短信业务中的应用,农信通系统通过利用微软消息队列解决了业务信息发送中遇到的发送瓶颈问题,对于类似需要大量发送短信的系统平台设计具有很好的参考意义。

参考文献:

[2]余英,梁刚.Visual C++实践与提高-COM和COM+篇.中国铁道出版社,2001.♡

[3]中国移动通信互联网短信网关接口协议CMPP3.0.


热门排行: 教你如何写建议书