#研发中间件介绍#异步消息可靠推送Notify
本文档适用人员:研发

- RCA:ActiveMQ 的生产者流量控制导致订单中心大量线程挂起;
- RCA:PHP连MQ超时导致主库连接被打满,引发众多应用数据不一致——原因在于 PHP::Stomp 包的默认重试次数和默认超时时间;
- RCA:调小 ActiveMQ之持久化 MySQL 的 wait_timeout 导致发送 MQ 消息频频失败。

- 可靠性:
- 消息的投递分为两个阶段
- 发布者向Broker发送消息
- Broker向订阅者投递消息
- 因此,消息有可能在三个地方丢失
- 发布者到Broker之间
- Broker本身
- 从Broker到订阅者
- 稳定性
- 监视
- Broker内存使用
- 消息收发功能
- 消息堆积情况
- 存储的插入速度
- 各个任务队列长度
- 其他各项即时统计数据等
- 控制
- 自动移除失效存储节点
- 优雅降级的控制
- 添加新存储节点
- 添加新Broker
- 限制
- 有可能产生重复消息
- 对订阅者的要求
- 幂等性 f(f(x)) = f(x)
- 重复调用多次产生的业务结果与调用一次产生的业务结果相同


- 模块关系
- 各个模块(队列、生产者、交换中心、DB、消息体缓存、队列缓存、日志缓存、分配中心、消费者)存在一定的对应关系,通过这些对应关系能够更好路由和分流消息,动态扩展系统,改善系统瓶颈。
- 这些对应关系都存储在控制中心关系数据库中,通过控制台界面来进行配置,各模块在启动和定时到控制中心来更新这些关系,用于消息的分配。
- 这些关系都遵守一定规则,添加更改不会影响系统的稳定性,如:一个队列必须对应两个以上的交换中心来处理消息,如果DB中还有消息没有消费完毕不允许直接删除,等等。
- 模块监控
- 控制台定期测试各个模块的健康状况。
- 各个模块会定期向控制中心发送一些监控数据,报告自己的运行状态。
- 控制台收集监控数据,以图表、拓扑图等形式向管理人员展示或报警。
- 消息跟踪
- 每一条消息在进入系统后都会被分配一个唯一标识。
- 各模块在处理消息时都会产生特定的日志信息,日志信息实时的传送到日志系统。
- 唯一标识+日志+各模块信息和关系可以容易的跟踪每一条消息的执行情况。


- 吞吐量:
- 交换中心、分配中心都采用平行结构。
- 队列使用持久化方式缓存,使用缓存减少对DB的操作。
- 交换中心与分配中心分离,性能互不影响。
- 动态改变网络拓扑结构,分流系统瓶颈。
- 动态控制吞吐量参数,调整系统性能。
- 扩展性
- 交换中心、分配中心、DB、缓存可以动态添加或删除。
- 队列路由路径可以动态改变。
- 可用性
- 交换中心、分配中心采用平行方式提高可用性。
- DB采用 master-master 方式提高可用性。
- 缓存采用多点读写方式提过可用性。
- 一致性
- 消息状态持久化在DB,未分配或消费失败的会再次被提取。
- 分配中心采用快慢两种方式接收消息处理消息。
- 等幂性
- 缓存保存正在处理的消息,防止重复分配。


#研发中间件介绍#异步消息可靠推送Notify的更多相关文章
- #研发中间件介绍#定时任务调度与管理JobCenter
郑昀 最后更新于2014/11/11 关键词:定时任务.调度.监控报警.Job.crontab.Java 本文档适用人员:研发员工 没有JobCenter时我们要面对的: 电商业务链条很长,业 ...
- RabbitMQ 延迟队列,消息延迟推送
目录 应用场景 消息延迟推送的实现 测试结果 应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给 ...
- NET SignaiR 实现消息的推送,并使用Push.js实现通知
一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...
- PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制
2013年10月06日最新整理. PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制 微信公共平台消息主动推送接口一直是腾讯的私用接口,相信很多朋友都非常想要用到这个功能. 通过学习 ...
- Swift - 本地消息的推送通知(附样例)
使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...
- .NET之微信消息模板推送
最近在项目中使用到了微信消息模板推送的功能,也就是将对应的消息推送到对应的用户微信上去,前提是你必须要有一个微信公众号并且是付费了的才会有这个功能,还有就是要推送的用户必须是的关注了你的微信公众号的. ...
- dwr3实现消息精确推送详细步骤
最近项目中需要用到推送消息,找了很久终于找到一篇不错的文章,方便以后查看就转载了,也分享给大家,希望能帮到有需要的人. 第一.在项目中引入dwr.jar,然后在web.xml中进行配置,配置如下: & ...
- 基于HTTP协议之WEB消息实时推送技术原理及实现
很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...
- spring boot 集成 websocket 实现消息主动推送
spring boot 集成 websocket 实现消息主动 前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单 ...
随机推荐
- RESTful API URI 设计: 判断资源是否存在?
相关的一篇文章:RESTful API URI 设计的一些总结. 问题场景:判断一个资源(Resources)是否存在,URI 该如何设计? 应用示例:判断 id 为 1 用户下,名称为 window ...
- Unity之Animation动画
Unity之Animation绘制动画 这篇文章做最简单的动画,让一个立方体从左边移动到右边. 1.创建一个Unity的新工程,名为TestAnimation,点击Create And Open按键, ...
- 倾情大奉送--Spark入门实战系列
这一两年Spark技术很火,自己也凑热闹,反复的试验.研究,有痛苦万分也有欣喜若狂,抽空把这些整理成文章共享给大家.这个系列基本上围绕了Spark生态圈进行介绍,从Spark的简介.编译.部署,再到编 ...
- 让你的JS更优雅的小技巧
首先,看一个非常不优雅的例子: 看到这段代码,虽然代码很短,但是一眼看上去就不想再看了,也就是没什么可读性.这段代码,没有封装,随意定义一个变量都是全局变量,这样在多人开发或者是大型开发中,极其容易造 ...
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- ZOJ Problem Set - 1115 Digital Roots
水题记录: 注:此题题目并没有限定数值的大小,所以要用字符串进行处理 #include <stdio.h> #include <string.h> int main() { ] ...
- 1Z0-053 争议题目解析688
1Z0-053 争议题目解析688 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 688.Which two statements are true about the compr ...
- (十五)WebGIS中平移功能的设计和实现
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这一章我们将详细讲解WebGIS工具栏中另一个基础工具——平 ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- 弹幕文化与HTML5
分享人:herry 弹幕篇:弹幕文化与HTML5 说说弹幕 弹幕文化 1什么是弹幕? 弹(dàn)幕(mù)在国内兴起已经有个把年了,相信很多朋友都差不多知道弹幕这个东西. 弹幕系统最初的起源是一家日 ...