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

目标

研发一套独立的消息系统,此系统进行集中配置管理供各业务系统使用,用于支撑站内信、短信通知、短信验证码、邮件、微信消息、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的优势。一、查询为什么会慢?每一个查询由一系列的子任务组成,每个子任务都会消耗一定的时间。这个我们在之前的单个…

生成n个从1到M(n = M)之间的不重复的随机数问题(洗扑克牌算法)

结合了对数组的使用、随机数生成等算法的知识。 学习这种由特殊到一般性的学习方法。面对复杂问题时候的逻辑僵滞和停顿。要加快速度锻炼这种缺陷,使之得到弥补。 思维僵滞的时候可以把问题联想成具体的模型,做到在脑海中有个具体的形象。这总比茫然一片…

CFLAGS详解

CFLAGS 表示用于 C 编译器的选项, CXXFLAGS 表示用于 C 编译器的选项。 这两个变量实际上涵盖了编译和汇编两个步骤。 CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS-I/usr/include -I/path/include。同样地…

一道大小端题目

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

算法复杂度速查表

图例 数据结构操作 数组排序算法 图操作 堆操作 大 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)…

求 s=a+aa+ aaa+ aaaa +aaaaa+........的值,a是从键盘输入的,项数也为键盘输入

总结&#xff1a;这道题目。主要是那个位数&#xff0c;需要*10&#xff0c; while&#xff08;i<f&#xff09;{ xy;//决定位数上的那个数 sumx//求和 y*10y;//决定位数 } package com.b;import java.util.Scanner; //输入一个数&#xff0c;如6 s666666666666666666666 6…

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

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

c++ 学习链接

1 chinaitlab实验室------c 2 转载于:https://www.cnblogs.com/javaspring/archive/2012/06/14/2656117.html

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

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

git使用小记

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

LINUX内核之普通自旋锁

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

MFC COMBO-BOX最详细教程

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

uboot源码——主Makefile的分析

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

Designing Virtual Connect for vSphere 5.x

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

latin1

Latin1是ISO-8859-1的别名&#xff0c;有些环境下写作Latin-1。ISO-8859-1编码是单字节编码&#xff0c;向下兼容ASCII&#xff0c;其编码范围是0x00-0xFF&#xff0c;0x00-0x7F之间完全和ASCII一致&#xff0c;0x80-0x9F之间是控制字符&#xff0c;0xA0-0xFF之间是文字符号。I…

Gnuplot 简单使用

一 、最简单的例子 gnuplot>plot sin(x) 其中 gnuplot> 为命令提示符&#xff0c;不是命令的一部分&#xff0c; 二 、加入设置 1 、设置 x 、y 坐标的范围 改变坐标范围 set xrange [xmin:xmax] set yrange [ymin:ymax] 让 gnuplot 决定坐标轴范围 gn…

C语言和C++的区别

c语言虽说经常和c在一起被大家提起&#xff0c;但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准&#xff0c;C是C99标准的。C89就是在1989年制定的标准&#xff0c;如今最新的是C11和C11标准。根据不同的标准&#xff0c;它们的功能也会有所不同&#xff0c;但是…

“返回指向栈空间的指针”的错误

char *GetMemory(void) {char p[] "hello world";return p;//试图返回一个指向栈空间的指针 }

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

VMware vCenter Converter 关闭SSL加密,提高35-40%性能原文&#xff1a;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、 写一个通用方法把任何一个类似“abcdefg”的字符串倒叙排。 2、 把字符数组String[] str{“6”,”5”,”3”,”1”,”2”,”4”}中的字符数字按照从小到大调整位置。  两种方法 3、 用杨辉三角规律打一个数字三角型。 4、 把List容器中的数字元…