一种基于多运营商发送短信的方法
技术领域
本发明涉及电子商务领域,特别涉及一种基于多运营商发送短信的方法。
背景技术
随着电子商务的快速发展,利用手机短信助力企业营销变得尤为重要,短信平台可以建立双向沟通,提升品牌形象,实现大批量的信息传递,节省了时间、成本,极大提高了沟通效率。为了提升短信的送达率和成功率,保证短信平台发送信息的健壮性,本系统集成了多个短信运营商,实现动态分流的方案,为短信发送提供了全量解决方案。现有的短信平台通常集成一家短信运营商,支持单发短信和批量业务。遇到电商大促等重要节日,短信发送总量呈现百万级别的增长,短信平台的健壮性和时效性依赖于集成的短信运营商接口,来实现短信营销和服务客户的需求。
CN108513271A发明实施例提供一种基于多个短信通道的短信分发方法和设备,短信分发方法包括:基于获取到的客户端发送的短信请求,根据Kubernetes中多个短信通道的第一负载情况,从多个短信通道中选择第一最优短信通道将短信分发给客户端;若在预设时间内未接收到客户端返回的成功送达信息,且判断获知熔断和降级次数小于等于预设阈值,则进行熔断和降级,并将熔断和降级次数加一,根据Kubernetes中多个短信通道的第二负载情况,从多个短信通道中选择第二最优短信通道将短信分发给客户端。本发明实施例通过设置熔断重试机制,能尽量确保短信成功发送,减少了数据的丢失率。通过Kubernetes云容器部署,可以有效的应对突发流量。能够从负载的角度优选出最佳的短信通道进行短信发送。
CN108769936A发明涉及一种短信分流方法、装置、计算机设备和存储介质。所述方法包括:监控发送表中第一短信模板对应的第一短信数量,第一短信模板与第一短信网关相对应,当第一短信模板对应的第一短信数量超过阈值时,开启对第一短信网关的分流模式,在所述分流模式下,分别获取发送表中第二短信模板对应的第二短信数量,根据第二短信数量,从第二短信网关中确定第一短信网关的分流网关,第二短信模板均对应一个第二短信网关,将第一短信模板对应的部分短信通过分流网关进行短信分流发送。采用本方法能应对某一短信网关的短信突发增长的情况,同时提高了短信网关的利用率。
CN111182482A发明实施例公开了一种短信分发方法、装置、存储介质及短信平台。所述方法包括:当接收到短信发送请求时,获取短信发送信息;根据所述短信发送信息确定短信通道列表;其中,所述短信通道列表中包含至少一个候选短信通道;计算所述短信通道列表中包含的各个候选短信通道对应的短信通道评分;基于短息通道评分最高的目标短信通道执行所述短信发送请求。通过采用上述技术方案,能够根据短息通道评分选择与短信发送信息对应的优质的短信发送通道,并基于该短信通道执行短信发送请求,可以提高短信的发送速度与成功率,进一步保证了短信平台的工作效率。
由于目前大多数电商公司的系统依赖单一的短信运营平台,发送短信的成功率和时效性不能保障,流量无法平均分配;并发情况下,造成消息队列积压,影响短信营销量;容错机制不明显,遇到瓶颈,无法手动切换高服务的运营商,接口请求超时,异常问题增多。
发明内容
本发明实施例提供了一种基于多运营商发送短信的方法。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。
根据本发明实施例,提供了一种基于多运营商发送短信的方法,包括:
S1:短信平台接收到请求,通过生成随机数,命中指定的redis服务器,然后存储手机号列表、业务方代码和短信内容到Redis列表中;
S2:启动定时任务分发线程,获取Redis列表里面的手机号信息、业务方代码、短信内容;
S3:通过业务方代码查询配置的渠道信息和账号列表;
S4:按照配置的渠道信息,计算绑定的账号列表的权重,然后选择发送的短信账号通道;
S5:构建服务商账号、渠道信息、短信内容和手机号列表的数据结构;
S6:启动多个线程池异步批量处理发送手机短信信息。
优选的,所述存储手机号列表、业务方代码和短信内容到redis列表为批量处理,所述批量处理的方法包括,
S11:将所述手机号列表、业务方代码和短信内容分成m组;
S12:读取配置的n个redis服务器;
S13:生成编号1-n个随机数,即redis01——redis n;
S14:将分所述组后的手机列表、业务方代码和短信内容存储到随机生成的随机数对应的所述n个redis服务器中。
优选的,所述手机号列表、业务方代码和短信内容分成m组,m>1,所述n个redis服务器,n>1,并且n>m。
优选的,所述手机号列表、业务方代码和短信内容以列表的数据结构存储在redis服务器中;名称组成规则为,短信前缀_渠道类型_redis编号,渠道类型是指配置的短信通道,国内单发或者国内批量发。
优选的,所述获取redis列表里面的手机号信息、业务方代码、短信内容采用轮询redis服务器的通信方式。
优选的,所述配置的渠道信息包含不同运营商的账号和账号所占的权重,权重的数值越大,代表该账号命中的几率越大。
优选的,所述计算绑定的账号列表的权重,然后选择发送的短信账号通道的算法为,
S41:将所有短信权重weight>0求和sum;
S42:在1-sum内随机生成的随机数rand;
S43:循环获取每个账号的权重weight,用rand—weight,如果小于0,说明命中了这个账号。
优选的,所述构建服务商账号、渠道信息、短信内容和手机号列表的数据结构为Java程序语言中的链表集合。
优选的,所述多个线程池异步批量处理是通过取出待分发的短信、手机号列表和命中的运营商短信账号,匹配不同的运营商短信分发接口,分发接口实现了不同的运营商的短信发送接口。
优选的,所述匹配不同的运营商短信分发接口的匹配规则是,通过生成的账号信息、渠道信息和业务方配置,选择符合条件的短信接口,下发短信内容,触达用户手机,实现短信发送的整个过程。
本发明实施例提供的技术方案可以包括以下有益效果:
根据上述实施例,
(1)本发明利用缓存组件redis和Java高级编程语言相结合,通过redis缓存手机号和短信内容,利用取模运算平均哈希到redis缓存队列里面。
(2)本发明通过业务方短信渠道配置,绑定多个运营商账号体系,实现了大批量短信哈希到不同账号,保障流量均摊,提高了短信的成功率和送达率,系统更加健壮。
(3)本发明采用redis服务器,支持存储的value类型相对更多,通过配置多个redis服务器,可进行系统的横向扩容,提高系统的吞吐量。
(4)本发明采用Java高级编程语言,采用多个线程池进行任务分发,有效的提高了短信的发送速度,避免了队列的积压。
(5)本发明在队列中的短信信息采用了json格式,便于对短信信息结构化处理。。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种基于多运营商发送短信的方法示意图;
图2是根据一示例性实施例示出的批量处理的方法流程图;
图3是根据一示例性实施例示出的基于多运营商发送短信的方法程序流程图。
具体实施方式
以下描述和附图充分地示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施方案的部分和特征可以被包括在或替换其他实施方案的部分和特征。本发明的实施方案的范围包括权利要求书的整个范围,以及权利要求书的所有可获得的等同物。在本文中,各实施方案可以被单独地或总地用术语“发明”来表示,这仅仅是为了方便,并且如果事实上公开了超过一个的发明,不是要自动地限制该应用的范围为任何单个发明或发明构思。本文中,诸如第一和第二等之类的关系术语仅仅用于将一个实体或者操作与另一个实体或操作区分开来,而不要求或者暗示这些实体或操作之间存在任何实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素。本文中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的结构、产品等而言,由于其与实施例公开的部分相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
需要说明的是,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
下面结合附图及实施例对本发明做进一步描述:
如图1-图3所示的一种基于多运营商发送短信的方法,包括,
S1:短信平台接收到请求,通过生成随机数,命中指定的redis服务器,然后存储手机号列表、业务方代码和短信内容到redis列表中;
S2:启动定时任务分发线程,获取redis列表里面的手机号信息、业务方代码、短信内容;
S3:通过业务方代码查询配置的渠道信息和账号列表;
S4:按照配置的渠道信息,计算绑定的账号列表的权重,然后选择发送的短信账号通道;
S5:构建服务商账号、渠道信息、短信内容和手机号列表的数据结构;
S6:启动多个线程池异步批量处理发送手机短信信息。
根据上述方案,进一步,所述存储手机号列表、业务方代码和短信内容到Redis列表为批量处理,所述批量处理的方法包括,
S11:将所述手机号列表、业务方代码和短信内容分成5组;
S12:读取配置的10个redis服务器;
S13:生成编号1-10个随机数,redis01—redis 10;
S14:将分所述组后的手机列表、业务方代码和短信内容存储到随机生成的随机数对应的所述10个redis服务器中。
根据上述方案,进一步,所述手机号列表、业务方代码和短信内容分成m组,m>1,所述n个redis服务器,n>1,并且n>m。
根据上述方案,进一步,所述手机号列表、业务方代码和短信内容以列表的数据结构存储在redis服务器中;名称组成规则为,短信前缀_渠道类型_redis编号,渠道类型是指配置的短信通道,国内单发或者国内批量发。例如:sms_send_3_01,sms_send_3_02,保存的键值包含业务方代码、手机号列表和短信内容等。
根据上述方案,进一步,所述获取Redis列表里面的手机号信息、业务方代码、短信内容采用轮询redis服务器的通信方式,通过业务方代码和redis名称,查询该业务方数据库中配置的短信渠道类型,比如:国内批量或者国内单发渠道,短信渠道的配置内容包含不同运营商的账号和账号所占的权重,权重的数值越大,代表该账号命中的几率越大。
根据上述方案,进一步,所述计算绑定的账号列表的权重,然后选择发送的短信账号通道的算法为,
S41:将所有短信权重weight>0求和sum,例如:短信A账号,权重为:50;短信B账号,权重为:20;短信C账号,权重为:10;短信D账号,权重为:10;短信E账号,权重为:10。计算公式为:将所有权重求和:sum=A+B+C+D+E=100;
S42:在1-100内随机生成的随机数rand;
S43:循环获取每个账号的权重weight,用rand–weight,如果小于0,说明命中了这个账号。
根据上述方案,进一步,所述构建服务商账号、渠道信息、短信内容和手机号列表的数据结构为Java程序语言中的链表集合。
根据上述方案,进一步,所述多个线程池异步批量处理是通过取出待分发的短信、手机号列表和命中的运营商短信账号,匹配不同的运营商短信分发接口,分发接口实现了不同的运营商的短信发送接口。
根据上述方案,进一步,所述匹配不同的运营商短信分发接口的匹配规则是,通过生成的账号信息、渠道信息和业务方配置,选择符合条件的短信接口,下发短信内容,触达用户手机,实现短信发送的整个过程。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的流程及结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。