惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
宝玉的分享
宝玉的分享
月光博客
月光博客
小众软件
小众软件
Jina AI
Jina AI
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale

博客园 - Virus-BeautyCode

【新年第一篇】平台的账号管理系统设计的设想 需求分析 在系统集成中面临多个产品的时候如何选择? 动态表单数据库设计 图片存储那些事 动态可配置表单的设计构思 缓存使用的思考1 [翻译].NET框架中的缓存 【翻译】SQL Server索引进阶:第一级,索引简介 网站架构资料收集整理 培养我们的目标感 使用Django来处理对于静态文件的请求 项目-团队-技术-个人(提拔篇) 项目-团队-技术-个人(专业篇) 项目-团队-技术-个人 (团队建设篇) MongoDB在Windows2003上得安装配置及使用 【翻译】MVC vs. MVP vs. MVVM 消息提示的架构演进-理论篇 MSSQL2005技术内幕-学习笔记
从短信类到短信平台之设计篇
Virus-BeautyCode · 2013-09-26 · via 博客园 - Virus-BeautyCode

引言

   手机短信在系统的应用中越来越广泛,从单纯的发送信息到手机,发展到接收手机发送的短信,进行信息的获取,更有甚者,还可以进行业务的变更,业务数据的 修改。从少量的发送,发展到大量的收发,衍生出大量的互动性短信。这就对短信收发的设计提出了更高的要求,不仅仅是简单的发送消息,不仅仅是简单的短信模 块,而且需要配合消息队列,短信路由子系统,业务编码规则等等技术来满足大量互动性短息的收发要求。

1、短信收发类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

package com.andyshi;

import java.rmi.RemoteException;

import org.tempuri.WebServiceSoapProxy;

public class SMSManager {

    WebServiceSoapProxy client=new WebServiceSoapProxy();

    public SMSManager(){

    }

    public void Receive(){

    }

    public void Send(){

        try {

            client.sendSMS("sdfsd", "sdfsf", "sdf", "sf");

        } catch (RemoteException e) {

            e.printStackTrace();

        }

    }

}

2、短信收发模块

   成为几个类的组合,Sender,Receiver,还有一些辅助的方法,而且输入输出也从简单类型变成了实体类,减少模块调用者的出错概率。

变化

1、从单个类变成了几个类的组合。

职责单一。

2、增加辅助类。

例如短信实体的创建类。

因为收到的短信是字符串,而且可能是多条短信,所以增加了一些解析类,从字符串中解析出短信,生成短信实体。

3、输入输入

整个收发过程的输入输出从简单类型的变成了实体类,这样可以减少模块调用者出错的概率,对外更加内聚。

3、短信收发子系统

   随着短信收发量的增大,同步实时发送和接收已经不能满足要求。而且随着业务的增加,业务系统的增加,有很多地方都需要短信的收发功能,比如说短信验证, 短信查询,短信互动,订阅短信通知,群发短信,短信操作业务,短信变更业务数据。业务也从单纯的发,或者是少量的收,变成大量的收发处理。

   这时候需要考虑更多的东西,例如短信的实时性,可靠性,自动重发,优先级。需要将短信的收发和处理分开,需要消息队列的配合,将收到和需要发送的短信先存入消息队列,然后定时从消息队列获取,进行发送或者业务的处理。

4、短信收发平台

短信收发平台负责具体的短信收发工作,分离具体的业务处理,增加短信路由子系统。

短信有三个运营商:移动,联通,电信。

4.1 短信路由子系统

   1、短信平台收到短信之后,交给短信路由子系统,将收到的业务编码,按照业务编码规则路由到某个业务子系统,进行业务的处理。如果是指令性的短信,则不需要信息返回;如果是交互性的短信,业务子系统处理之后肯定还需要发送短信,发送短信给短信路由子系统。

   2、如果业务子系统需要发送短信,肯定是需要发送给一个手机号的,这个手机号只可能是具体的一个运营商的,但是业务子系统不用关心这些,它只是知道发送给一个手机号一段消息,然后交给短信路由子系统,短信路由子系统来决定经由那个运营商的通道发送到具体的手机号。

4.2 存储设计

   很多的短信都可以用模板+具体业务数据(例如祝福类短信,其中的用户名不一样,其他的内容都是一样的)的形式来表示,业务子系统负责存储模板和业务数据,这样可以减少很多冗余,而且需要修改短信内容的话,只需要修改模板就可以了。

短信平台存储完整的短信内容,方便查询统计。

4.3 其他

   随着短息量越来越大,子系统也会使用消息队列来缓存收发的消息,减轻具体业务的处理压力。

============================================

后记

==========

2013-08-14

发送子系统

接收业务系统来的短信,进行具体的发送工作。发送之前,可能需要区分通道,也就是短信是发给那个运营商的,之前是想交给路由子系统来实现的,但是觉得这个工作更应该是发送子系统来做的事情,路由子系统和业务还是有一点关系,至少还有一个业务匹配规则配置。

接收子系统

接收外部发送过来的短信。

路由子系统

路由和分解短信到具体的业务子系统,路由的规则包括特服号码(运营商或者是SP分配给短信业务申请者的一个号码)和短信业务的识别码。

比如说发送到100900的都是订单获取的业务,发送到100800都是个人信息获取的业务,发送到100700都是帮助获取的业务。

识别码也就是接收短信的内容,或者是内容的前几位数字。比如说接收到的内容是QX10000,那就是订单子系统的,用来取消(QX)订单,订单编号是10000。