来京东实习一个半月了,一个多月的时间都花在消息中台上,所以总结记录一下。先说一下实习感受,团队的氛围确实挺好的,挺照顾我这个实习生,有问题大家都挺乐意帮忙的。年末公司发的大礼包实习生没有,leader就把他的礼包给我了,真的好暖好暖,哈哈。导师也真的很认真负责,前两三个星期导师每天晚上都会花两小三个小时对我进行指导,从数据库的设计到编码规范等。最近年底,好些项目比较忙,导师、leader和有的同事已经连着两个星期都是凌晨2点多回去的,最晚的时候凌晨五点才下班,认真工作的样子,很帅!题外话说多了哈。

写在开头

首先说一下做消息中台的目的。因为我们部门有很多项目都需要向用户发送短信,目前的项目发送短信都是需要单独对接鹰眼短信、京东短信通道等接口,用户信息,密码信息等都在项目的配置文件中。使用消息中台后,所有的项目都统一调用消息中台发送短信,消息中台再调用相应的短信发送通道。

  1. 那么第一个好处是,一旦出现密码泄露等情况,原来的方案就需要所有的项目都重新配置(大公司项目重新上线是比较麻烦的,需要层层审批),但使用消息中台后可以通过管理系统统一进行配置,便于操作。
  2. 第二点,使用通道切换策略。原本的项目通常只使用一个短信发送通道(如京东、阿里短信通道),一旦短信通道出现问题,那么就影响用户的使用(之前短信通道出现问题,大冬天的景区游客收不到验证码,无法进入园区)。而开发的消息中台使用智能通道切换策略,当检测到某一短信通道不能使用后,就进行通道的切换。
  3. 第三点,消息中台使用异步发送的机制,提高吞吐量、并发量。当我们点击发送验证码时,通常有几秒钟后才能收到短信,在这期间一直占用着线程。在发送邮件时尤为明显,延迟可能有一分钟甚至更长。
  4. 第四点,消息中台对消息数据进行沉淀,可用于大数据部门进行数据分析。
  5. 第五点,现有的SDK包都是对单一通道进行封装,但是都不能够兼容多个通道。
  6. 最后,消息中台的商业价值,既可以私有化到单个的项目中提高项目的报价(大约几十万),也可以赚差价(多个项目在通道方均使用京东城市的账号,因为在通道方是按消息的数量进行收费的,如单月两万条短信和十万条短信的短信单价是不一样的)。

再说一下我工作的内容。短信中台目前对接了京东、鹰眼短信通道,邮件中台对接了腾讯企业邮箱、qq邮箱、163邮箱、京东邮箱,支持smtp、exchange协议。推送支持极光通道,文件上传对接了京东云、Minio、FastDFS,在开发环境完成开发后,然后在测试环境部署,由测试人员进行测试,提交sql工单创建生产环境数据库,最后由运维在生产环境部署,开白名单。并分别撰写了相应的接口文档(接口出参入参、SDK接入方式、加密算法),再与产品沟通,产品经理设计短信中台管理系统,又花了一个星期开发管理系统的后台接口。开发使用的idea、ssm、mysql,也是使用破解版的navicat,哈哈。

数据库设计规范

每张表都包含creator、created_time、modifier、modified_time、deleted字段,且主键id要留给DBA操作,需要再另外建立实体的唯一标识符,如消息表中需要建立message_id字段,varchar(64)。业务表的名称前缀加biz_,配置标的名称前缀加cfg_。

代码实现

因为是中台系统,以后可能会有很多项目使用,所以凡是对数据库操作的都使用redis进行缓存。但是短信管理系统后台的接口就不需要缓存了,因为操作的频度不高。

整个中台系统都使用一个模板,抽出短信、邮件、推送等共有的的地方进行复用,不同的地方使用策略模式,这样以后需要新接入通道,直接新增策略就可以,完全不影响现有的代码。比如,短信表(biz_messagge_sms)、邮件表(biz_messagge_email)、推送表(biz_messagge_push)都继承BaseMessage。再比如使用消费者消费消息时,都需要根据消息id获取消息实体、为消息选择发送通道、发送消息、更新状态。就把这些共用的抽离出来,相当于一个小小的框架。在开始写短信中台时,思路是很模糊的,格局也比较小,想着只要把这个功能实现了就行,导师耐心的一步步引导,代码也重构了很多次,最后导师才把框架告诉我,这个框架出来后,思路就感觉清晰了好多,到后来又做邮件、推送、通知、文件上传时,就可以使用这个框架很快完成了,收获很大。

定义接口的入参时,出于安全性考虑,新建立一个实体不直接使用数据库相应的实体。比如短信表(biz_messagge_sms),接口重新定义了一个BizMessageSmsVo实体,而不是直接使用BizMessageSms。

接口文档

完成消息中台系统的代码开发后,接下来就是写接口文档了,便于后期其他项目调用。接口文档包括版本号、引言、接口(访问路径、请求参数、返回参数、示例)、SDK代码接入示例、API接入(请求、响应报文示例、签名算法)、响应码。分别撰写完短信(单发、群发)、邮件、推送、文件上传、业务通知接口文档后,发布到京东cf文档上。

后台管理系统

最后一步就是完成后台管理系统的开发。有了后台管理系统后,就不用每次都在数据库中对消息中台进行配置了。这一步,要和产品经理详细说明项目的功能、数据库的设计等信息。产品经理结合实际的需求,对后台界面进行设计,当然,如果和产品经理有冲突就要重构原有的设计代码了。和产品沟通完项目的具体细节后,就要撰写管理后台所需的接口文档,写完成接口文档后,前端的同学可以进行开发了,自己也根据接口文档写各个接口的实现了。

消息中心——短信、邮件、推送、文件上传中台系统(京东实习)总结相关推荐

  1. 【免费的短信推送API】【MobTech】【Android】手机短信验证码推送

    前言 作业需要用到:短信验证码推送(用于注册).了解到一个免费的手机短信推送平台,就去官网看了看相关API怎么用. http://www.mob.com/wiki/detailed?wiki=SMSS ...

  2. python 阿里云短信群发推送

    python 阿里云短信群发推送 本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信 ...

  3. python实现TCP远程服务器文件上传,下载系统

    TCP服务器代码如下: from socket import *def client_upload(client_socket):"""上传数据""& ...

  4. bottle 文件服务器,python bottle 框架基础教程:文件上传 | linux系统运维

    文件上传,需要注意的是前端html的form表单中,要添加 enctype="multipart/form-data"属性,否则无法上传文件.在后端,用request.files方 ...

  5. Java实现腾讯云短信定时推送天气信息(通俗易懂)

    准备: 首先在腾讯云申请自己的短信 腾讯云短信链接 然后再申请签名和正文模板 签名提供材料等待审批通过就可以 模板的模板内容是可以传参数的 例子:我是{1},来自{2},可以添加多个,后续可以通过参数 ...

  6. linux ssh 推送文件_WinSCP软件双系统(Win-Linux)文件传输教程

    WinSCP软件是windows下的一款使用ssh协议的开源图形化SFTP客户端,也就是一个文件传输的软件,它有什么优点吗,咱们嵌入式开发中经常会将windows中的文件复制到linux系统当中,比较 ...

  7. Android 使用mqtt实例,包括接收服务器推送以及上传数据到服务器

    1.最方便的方法,使用dlc的module连接mqtt 步骤.1--导入dlc依赖和module //dlc_mqttmodule implementation project(':garbagere ...

  8. vue自定义组件-文件上传后端接口

    学习目标: vue自定义组件-文件上传后端接口 学习内容: 准备工作: 后端环境:JAVA-Springboot项目数据库表(这里使用psql数据库):sys_file_record保存上传文件的信息 ...

  9. asp.net ftp上传文件到服务器,.net 文件上传到服务器上

    详解 Linux 下 SSH 远程文件传输命令 scp 3.将本地文件上传到服务器上 scp-P 2222/home/lnmp0.4.tar.gz root@www.vpser.net:/root/l ...

最新文章

  1. VBA遍历文件夹下文件文件实用源码
  2. JdbcTemplate(操作数据库-添加功能)
  3. apache arm 交叉编译_移植apache2 ARM版 – 交叉编译apache2 | 学步园
  4. 面试官问你MySQL的优化,看这篇文章就够了
  5. springboot 上传图片大小_springboot 文件上传大小配置的方法
  6. Linux系统故障处理案例(一)【转】
  7. Kafka是什么、主要应用在什么场景?
  8. 阿里云 linux 挂载数据盘
  9. eclipse,aptana,zendstudio,flex全屏插件
  10. linux firefox 插件开发教程,火狐(firefox)浏览器插件开发简明教程
  11. 推荐几个rpm包下载网站
  12. 如何自学html5 web前端工程师培训视频教程
  13. php写浏览记录,php 浏览历史记录的实现方法
  14. 【解决】UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xef in position 0: ordinal not in range(128
  15. python迷宫地图代码_[内附完整源码和文档] 基于python实现的迷宫游戏
  16. 【转载】ubuntu16.04 无线/Wifi 上网速度慢的解决方法
  17. Win10重装系统/迁移系统,教你如何简单快速删除原系统文件
  18. tensorflow 安装失败
  19. ECharts3D地图
  20. 傻-amp;gt;天使

热门文章

  1. 爆笑:极品版校园八大尴尬时刻...........
  2. lerna publish时报错 E401 [UNAUTHORIZED] Login first
  3. 手动生成简单的激活码,利用递归校验唯一性
  4. vue-flipper过渡动画
  5. php序列化(serialize)和反序列化(unserialize)函数
  6. B站每日自动签到传统单节点网站的 Serverless 上云
  7. Python爬虫实战+数据分析+数据可视化(猫眼电影)
  8. Python 英汉-汉英 词典脚本,可以安装到Linux命令中
  9. 树莓派造服务器(三):内网穿透方案
  10. oracle end proc,初学者Oracle数据库:Proc和Proc++的使用和示例