最近重构公司消息服务的架构设计

目标

研发一套独立的消息系统,此系统进行集中配置管理供各业务系统使用,用于支撑站内信、短信通知、短信验证码、邮件、微信消息、APP消息、IM等消息形式。

 

架构

 

 

1) 基于消息队列采用发布、订阅模式。消息的生产者为对外的消息接口,接收业务系统消息后将消息写入到消息队列指定的topic,订阅者对消息进行处理并行的发送消息。

2) 所有通知消息定义唯一“消息ID”来标识消息类型。

3) 通知消息由各消息模块(短信、邮件、站内信、微信、APP)自己负责本消息的发送,去读取消息节点配置信息,根据当前的消息ID判断自己是否需要发送消息,是则发送否则丢弃。

4) 消息体,消息体采用JSON报文格式,方便各系统之间对接。

 

消息数据定义

 

 

 

{

  msghead:

{

  msgtype:””,

  msgid:””,

  rcvuid:””,

  rcvcid:””,

  rcvmobile:””,

  rcvemail:””,

  time:””,

  system:””

  }

  ,

  msgbody:

  {

text:””,

noticemsg:””,

wxmsg:””,

appmsg:””,

immsg:””,

smsmsg:[{},{}]

  }

}

 

 

字段

说明

msghead

消息头

 

 Msgtype

消息类型

消息类型:notice/sms/email/im/wx

 Msgid

消息id

定义全局唯一

 Rcvuid

接收帐号id

 

 Rcvcid

接收公司id

 

 Rcvmobile

接收手机号

 

 Rcvemail

接收邮箱

 

 Time

发送时间

 

 System

发送系统模块

云仓

Msgbody

消息体

 

 Text

文本消息内容

 

 Noticemsg

站内信消息内容

 

 Wxmsg

微信消息内容

 

 Appmsg

APP消息内容

 

 Immsg

IM消息内容

 

 Smsmsg

短信消息内容

标签->值数组,供短信模板使用

 

 

 

项目结构

 

消息接口API(msg_api)

1) 负责接收业务系统发送消息请求,将消息写到消息队列中;

2) 提供接口供业务系统查询,如查询用户的站内信消息列表、查询验证码是否正确等;

3) 提供数据接口供管理平台使用,如配置信息发送结点;

 

 

短信处理程序(msg_handle_sms)

1) 负责订阅消息,读取消息进行短信发送;

2) 负责验证码的生成处理;

3) 数据操作调用消息接口API;

4) 通知消息需要读取配置信息决定当前消息发送或丢弃;

 

 

邮件处理程序(msg_handle_email)

1) 负责订阅消息,读取消息进行邮件发送;

2) 数据操作调用消息接口API;

3) 通知消息需要读取配置信息决定当前消息发送或丢弃;

 

 

站内信处理程序(msg_handle_notice)

1) 负责订阅消息,读取消息进行通知;

2) 通知消息需要读取配置信息决定当前消息发送或丢弃;

3) 数据操作调用消息接口API;

 

数据库

1) 使用一个消息数据库;

2) 数据库表分为短信模块、站内信模块、IM模块(暂不做)、通知信息配置模块;

转载于:https://www.cnblogs.com/assion/p/7741562.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能的MySQL(6)查询慢与重构查询

只有好的库表结构、合理的索引还不够,我们还需要合理的设计查询,齐头并进,一个不少才能充分发挥MySQL的优势。一、查询为什么会慢?每一个查询由一系列的子任务组成,每个子任务都会消耗一定的时间。这个我们在之前的单个…

一道大小端题目

今天看到一道关于大小端的题目,觉得很有趣,理解一番后摘抄如下: 题目: 示意图: 结果说明: 小端模式 大端模式

算法复杂度速查表

图例 数据结构操作 数组排序算法 图操作 堆操作 大 O 复杂度图表 Big O 复杂度 推荐阅读 Cracking the Coding Interview: 150 Programming Questions and Solutions[33] Introduction to Algorithms, 3rd Edition[34] Data Structures and Algorithms in Java (2nd Edition)…

遇到异常:这可能是由某个扩展导致的

重构机房收费系统,我用EA画完UML图,打算用EA自己生成VB.NET代码,这样会方面些。没想到事情没有我想象的那么简单,可能是第一次尝试的原因,导入代码的过程中问题是一个接着一个。不过还好,虽然沿途困难重重&…

文件IO——文件IO相关概念

1、API (1)基于linux做应用开发,其实就是通过调用linux系统提供的API来实现。 (2)API 是一些由linux系统提供的函数,给应用层使用,以完成一定的功能。 (3)常用的文件IO的…

git使用小记

1. 基本操作 全局配置: git config --global user.name xx git config --global user.email xxx 初始化一个仓库: git init 添加: git add "file1.txt" git commit -m "添加文件1" 比较:分别列出每个文件…

LINUX内核之普通自旋锁

LINUX内核之普通自旋锁 CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~ Author:WenHui,WuHan University,2012-6-15 PDF版阅读地址:http://www.docin.com/p1-424285718.html 普通自旋锁 自旋锁…

MFC COMBO-BOX最详细教程

找了好多,这是讲的最清楚的,与大家共享! 转:https://blog.csdn.net/fym0121/article/details/7515862 当你只需从一列对象中选出一个时,使用COMBO BOX是一个好主意,因为它节省空间。这篇文章讲述了如何使…

uboot源码——主Makefile的分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客:u-boot Makefile完全解读_williamwang2013的博客-CSDN博客 参考博客:U-boot主Makefile分析_XiaoBaWu的博客-CSDN博客 参考博客:U-boot配置及编译阶段…

Designing Virtual Connect for vSphere 5.x

Designing Virtual Connect for vSphere 5.x如何在 HP C7000刀笼使用VC以满足vSphere 5.x 英文视频连接如下:http://professionalvmware.com/2013/05/vbrownbag-follow-up-designing-virtual-connect-for-vsphere-with-joe-clark-elgwhoppo/1:首先介绍一…

VMware vCenter Converter 关闭SSL加密,提高35-40%性能

VMware vCenter Converter 关闭SSL加密,提高35-40%性能原文:http://www.vmwarearena.com/2013/07/improving-transfer-rate-of-p2v-and-v2v.htmlVMware vCenter Converter Standalone 5.0 is a free tool from VMware to easily perform P2V(Physical to virtual co…

图像拼接算法及实现

第一章 绪论 1.1 图像拼接技术的研究背景及研究意义 图像拼接(image mosaic)是一个日益流行的研究领域,他已经成为照相绘图学、计算机视觉、图像处理和计算机图形学研究中的热点。图像拼接解决的问题一般式,通过对齐一系列空间重叠的图像,构…

程序员,你还在 Select * 吗?

应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。 那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程…

学习笔记-记ActiveMQ学习摘录与心得(二)

上个周末被我玩过去了,罪过罪过,现在又是一个工作日过去啦,居然有些烦躁,估计这几天看的东西有点杂,晚上坐下来把自己首要工作任务总结总结。上篇学习博客讲了ActiveMQ的特性及安装部署,下面先把我以前启动…

谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)

C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结构更加清晰,代码重用性更高。 以下是msdn中对new,virtual和override的定义: …

unsigned char s1 : 2的用法

#include<stdio.h> #include<stdlib.h> //默认按照四字节对齐 //#pragma pack(1) union V {struct X{unsigned char s1 : 2;unsigned char s2 : 3;unsigned char s3 : 3;} x;unsigned char c; } v; //#pragma pack()int main(void) {v.c 100;//对应的二进制数字是…

juc线程池原理(六):jdk线程池中的设计模式

一、jdk中默认线程池中的代理模式 单例类线程池只有一个线程&#xff0c;无边界队列&#xff0c;适合cpu密集的运算。jdk中创建线程池是通过Executors类中提供的静态的方法来创建的&#xff0c;其中的单例类线程池的方法如下&#xff1a; public static ExecutorService newSin…

Code First :使用Entity. Framework编程(6) ----转发 收藏

Chapter6 Controlling Database Location,Creation Process, and Seed Data 第6章 控制数据库位置&#xff0c;创建过程和种子数据 In previous chapters you have seen how convention and configuration can be used to affect the model and the resulting database schema.…

计算多个文档之间的文本相似程度

首先我们上代码&#xff1a; from sklearn.feature_extraction.text import CountVectorizer corpus [ UNC played Duke in basketball, Duke lost the basketball game, I ate a sandwich ] vectorizer CountVectorizer(binaryTrue,stop_wordsenglish)#设置停用词为英语&…

双边滤波

双边滤波 高斯滤波是最常用的图像去噪方法之一&#xff0c;它能很好地滤除掉图像中随机出现的高斯噪声&#xff0c;但是在之前的博客中提到过&#xff0c;高斯滤波是一种低通滤波&#xff08;有兴趣的点击这里&#xff0c;查看之前的博客&#xff09;&#xff0c;它在滤除图像中…