冯世杰 马超 林树鸿 罗林波 王国仕
摘 要:通过调查分析公司短信费用支出的现状,发现短信费用高昂的问题,文章就此提出一种显著降低费用的解决方案——设计开发新一代业务消息综合网关系统。全面阐述系统的基本功能、业务流程以及技术原理、技术实现,通过部分采用免费的消息推送通道替代收费短信网关,指出该方案有助于替代公司部分业务系统的短信发送,降低短信费用,提升用户体验。
关键词:消息综合网关;消息队列;富文本
中图分类号:TP311 文献标识码:A文章编号:2096-4706(2021)20-0135-04
A Solution to Reduce SMS Push Cost and Improve User Experience
FENG Shijie, MA Chao, LIN Shuhong, LUO Linbo, WANG Guoshi
(Information and Communication Branch of Hainan Power Grid Co., Ltd., Haikou 570203, China)
Abstract: Through the investigation and analysis of the current situation of the companys short message expenses, it is found that the short message cost is high. This paper puts forward a solution to significantly reduce the cost—designing and developing a new generation of business message integrated gateway system. This paper comprehensively expounds the basic functions, business processes, technical principles and technical implementation of the system, the free message push channels are used partially to replace the charging SMS gateway. It is pointed out that this scheme is helpful to replace the short message sending of some business systems of the company, reduce SMS costs and improve user experience.
Keywords: message integrated gateway; message queue; rich text
0 引 言
目前公司内部会议通知、业务工单信息、业务告警消息、外部催费短信、停电通知等内外部消息均通过短信平台进行发送,随着公司数字化业务的不断发展,以及公司对客户服务满意度不断提升的要求,消息推送数量和内容越来越多,造成公司短信通道费剧增。
随着通信技术和移动互联网的飞速发展,带宽和流量不再是应用瓶颈,免费多媒体通信平台越来越多,使用比较高频的包括微信、公众号、APP等,使用短信的用户越来越少,公司消息通知业务也可与时俱进。
1 现状
公司现有的短信网关封装各运营商提供的短信API接口,以Webservice提供短信接口服务,公司授权业务系统都可直接调用该接口发送短信,包括业务办理通知类、用电提醒通知类、内部职工使用通知、派单类、宣传通知类,不同业务系统对消息的实时性和到达率有不同层次的要求,其中客户业务办理、停复电缴费通知类对实时性要求最高,有些业务系统消息短信推送不能被替换,但还有一部分业务系统消息推送是可以采用免费的推送渠道,或增加免费推送渠道配合短信推送,取得更好的用户体验。
2 问题与需求
公司当前存在两个主要问题:一是短信费用居高不下。二是短信文本内容字数和形式受限,通常单条短信是70个字(含70)以内的,超出70个字的短信是长短信,手机用户看到的是一条,实际网关会按照多条计费,每67个字计费一次,同时短信只支持文字,不支持语音、图片、视频等多媒体,因此导致交互受限,用户体验有限,单一的短信消息形式已经不能满足电网业务发展需要,需丰富消息投送渠道,因此迫切需要一个平台来解决这些问题。
3 确定目标
通过对公司需要发送消息的业务系统进行调查分类,根据系统消息实时性、送达率要求,对接收消息的客户类型进行分析,在满足业务需求的情况下,选择最合适的投送渠道,我们设计开发新一代电网业务消息综合网关,对业务系統消息来源和消息推送渠道统一管理。
4 功能介绍
新一代数字电网业务消息综合网关平台设计实现的功能主要包括接入服务管理,通过原有业务系统与短信网关的接口规范,WebService调用;用户数据导入,将每个系统的消息发送目标用户导入新的网关进行统一分类管理;消息调度管理,即消息的收发处理、返回值管理、消息发送状态的监控、优先级的调度和消息的提醒服务;推送渠道管理,分别按照elink、微信、QQ、APP、短信的接口规范进行对接,处理消息的发送,对这些推送渠道进行管理,也可以同时选择多渠道发送;统计查询管理,对消息发送的送达率等进行统计分析;系统配置管理,包括服务主从配置、权限认证、发送频率与优先级的配置等。
5 平台特点
平台系统采用高可用标准进行设计部署,保持服务持续性,消息管理服务采用主备的结构,两台服务器采用心跳方式探测对方是否在线。建立数据缓存层和数据贴源层,接管业务系统的消息推送服务,对各类消息数据分类、整合及汇总,建立统一的消息集市,支持与各类源系统的对接,在接口架构设计上遵循现有短信网关的设计原则,减少与各源系统对接的技术障碍,降低系统对接成本与风险。系统渠道推送管理模块先连接主,失败后再连接备,备接替主,主恢复后,备自动断开已建的连接,渠道推送管理模块请求主服务分配线程,对应的渠道管理服务直接连接该线程,通过ping保持长连接,后台请求主服务分配线程,后台直接连接该线程发送消息。系统采用JAVA实现,网络超时采用时间轮,消息队列+事件驱动。技术架构与数据模型设计能够兼容多种消息类型,架构支持日消息总量400万以上的扩展,可通过简单处理节点的扩容实现处理能力的同步扩容而无须调整系统架构以及程序结构。通过切换电网内部某业务系统消息推送的服务端口,指向新一代业务消息综合网关平台,系统实现逻辑图如图1所示,业务源模型如图2所示。
6 技术路线
新一代的数字电网业务消息综合网关的采用的技术框架如图3所示。
平台系统采用RPC调用框架Venus,采用OSP协议来封装RPC调用,底层通信协议采用Netty,传输协议使用Thrift,数据库选MySQL,消息队列用Kafka,应对高吞吐量消息推送场景。Venus框架是一个去中心化的RPC调用框架,Client端对Server端的调用由proxy进行转发。Client到Local Proxy,以及Local Proxy到Server端保持TCP长连接。Proxy提供跨语言支持服务治理,服务发现,路由调度,限流熔断等功能,并额外支持HTTP GET +URL Path/Parameter,HTTP POST +JSON和RPC OSP协议的转换。Proxy分为Local Proxy和Remote Proxy。Local Proxy和Client部署在同一台服务器上,通过Domain Socket,减少TCP栈的调用开销。Remote Proxy作为备用链路,跨组织调用。
消息网关依赖kafka队列,分成消息受理队列,消息异步落盘队列,延时写入队列,反馈队列等。整个消息网关都是异步化操作,消息的分发有可能早于消息的落盘,这样在数据库消息发送状态更改时,就会出现无法找到的情况。可以采用延时队列,对消息发送状态的落盘动作进行延时写入。
7 elink推送的实现
elink推送实现首先保留了短信网关的WEBSERVICE发送服务elink模块新开发一个WEBSERVICE的消息接收服务,通过配置IP,把业务消息源系统切换指向elink消息接收服务的IP地址,通过接收服务我们获取了消息数据后放到消息队列里,通过elink推送。
业务系统消息的数据归集,数据归集内容包括令牌(token,通过getToken方法获得的token字符串),手机号码(mobilelist),发送消息的内容(content),当获取过来的手机号码在elink的通信录里找不到,则此条消息我们直接调用短信网关的服务,以短信的方式发出。
elink消息发送的实现方法为:
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory connectionFactory = get Connection Factory();
Connection newConnection = null;
Channel createChannel = null;
try {
newConnection = connectionFactory.new Connection();
createChannel = newConnection.createChannel();
/**
* 聲明一个队列。
* 参数一:队列名称
* 参数二:是否持久化
* 参数三:是否排外 如果排外则这个队列只允许有一个消费者
* 参数四:是否自动删除队列,如果为true表示没有消息也没有消费者连接自动删除队列
* 参数五:队列的附加属性
* 注意:
* 1.声明队列时,如果已经存在则放弃声明,如果不存在则会声明一个新队列;
* 2.队列名可以任意取值,但需要与消息接收者一致。
* 3.一定在发送消息前确认队列名称已经存在RabbitMQ中,否则消息会发送失败。
*/
createChannel.queueDeclare(“sms.queue”, true, false, false,null);
/**
* 接收消息。会持续坚挺,不能关闭channel和Connection
* 参数一:队列名称
* 参数二:消息是否自动确认,true表示自动确认
接收完消息以后会自动将消息从队列移除。
* 参数三:消息接收者的标签,用于多个消费者同时监听一个队列时用于确认不同消费者。
* 参数四:消息接收者
*/
createChannel.basicConsume(“sms.queue”, true, new DefaultConsumer(createChannel) {
@SneakyThrows
@Override
public void handleDelivery(String consumerTag, Envelope envelope,
BasicProperties properties,
byte[] body) throws IOException {
String string = new String(body, “UTF-8”);
System.out.println(“接收到消息: -》 “ + string);
//1、使用JSONObject
try{
JSONObject jsonObject=JSONObject.parseObject(string);
ReqParam reqParam = JSONObject.parseObject(String.valueOf(jsonObject),ReqParam.class);
MsgJson msgJson = null;
if (null != reqParam){
msgJson = JSONObject.parseObject(reqParam.getData(),MsgJson.class);
}
String memberMobile = “”;
String content = “”;
if (null != msgJson){
String[] memberMobiles = msgJson.getMobilelist().split(“;”);
if (null != memberMobiles && memberMobiles.length > 0){
for (int i = 0; i < memberMobiles.length; i++) {
memberMobile = memberMobiles[i];
content = msgJson.getContent();
java.sql.Connection conn = DBCPConnectionPool.getInstance().getConnection();
String elinkId = getElinkId(conn,memberMobile);
sendMessage(elinkId,content);
System.out.println(“消息發送成功。”);
insertHndwMessage(memberMobile, “”, content, elinkId,reqParam.getReqId());
System.out.println(“消息消费成功,插入历史表”);
}
}
}
}catch (Exception e){
System.out.println(“处理消息失败”);
}
}
});
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
8 结 论
通过实施新一代数字电网业务消息综合网关,对各类面向客户、内部员工的消息进行统一归口管理,对可取代短信的业务类型,全面替代;需要丰富推送方式的业务类型进行全面改造,达到降低企业短信费用、扩充消息应用场景、丰富用户体验的目标,在满足企业需求的情况下取得如下效果:系统稳定运行,及时收到业务系统信息通知,仅保留必要的短信发送,其他采用eLink或其他免费通道进行消息推送,将替换的业务系统短信费用降至零,业务源消息归集成功率≥99.99%,送达成功率≥99.9%,达到预期的效果,同时采取多项措施保证平台运行稳定性,包括主从热备,服务器DOWN机自动启动,对信息推送的目标用户进行电话回访,调查替换后的用户体验,每天统计消息送达率,进行持续观察。
参考文献:
[1] 廖宁,杨文.智慧校园高校统一消息中心平台的设计与实现 [J].电脑知识与技术,2019,15(19):93-95.
[2] 丁磊.基于WebSocket的消息推送系统设计与事件匹配技术研究 [D].北京:北京邮电大学,2014.
[3] 杨乐.基于WebSocket的信息推送服务平台设计与实现 [D].南京:东南大学,2017.
[4] 韩雪松,林霞.基于大数据的精准推送分类信息发布平台 [J].电脑知识与技术,2020,16(14):86-87+91.
[5] 陈相余.云平台下消息推送系统的设计与实现 [D].成都:电子科技大学,2021.
作者简介:冯世杰(1988—),男,汉族,海南万宁人,工程师,本科,研究方向:数据库;
马超(1989—),男,汉族,湖北荆州,高级工程师,本科,研究方向:系统集成;
林树鸿(1995—),男,汉族,海南万宁人,工程师,本科,研究方向:信息化、数字化应用建设;
罗林波(1982—),男,汉族,湖北红安人,高级工程师,硕士研究生,研究方向:电力信息化;
王国仕(1986—),男,汉族,海南海口人,工程师,硕士研究生,研究方向:信息系统建设与运维