#研发中间件介绍#异步消息可靠推送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协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单 ...
随机推荐
- 教你如何塑造JavaScript牛逼形象
如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScrip ...
- DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践(1)
好久没写 DDD 领域驱动设计相关的文章了,嘎嘎!!! 这几天在开发一个新的项目,虽然不是基于领域驱动设计的,但我想把 DDD 架构设计的一些东西运用在上面,但发现了很多问题,这些在之前的短消息项目中 ...
- windows下compsoer的简单操作
*****************************************[安装]***************************************** 下载地址https://g ...
- 安装infer整个过程
日期:2015-06-26 孟起 15:43:25 大神.. 孟起 15:43:38 我是不是照着这个安装 HelloWorld 15:45:05 直接找二进制文件安卓就行 孟起 15:46: ...
- 制作动画或小游戏——CreateJS事件(二)
在Canvas中如果要添加事件,就需要计算坐标来模拟各种事件,而EaselJS中已经封装好了多个事件,只需调用即可. 一.事件 1)点击 事件是绑定在Shape类中的,click事件与DOM中的意思是 ...
- jQuery.grep()
什么是jQuery.grep()? jQuery.grep()是一个查找满足过滤函数的数组元素的函数.原始数组不受影响,返回值为数组. 用法介绍: 写法: jQuery.grep( array, fu ...
- PHP中常见魔术方法解析
<?php class info { private $province; //省 public $city; //城市 private $myname; //姓名 //__construct( ...
- TCP三次握手,四次挥手
前言 在面试的过程中,TCP的传输协议经常会出现.以前我参加面试的过程中就被问到过,现在轮到我面试其他人的时候,我也会问一些相关的问题.作为一名开发者,无论使用什么样的开发语言,最基本的网络知识一定要 ...
- Sql Server函数全解(四)日期和时间函数
日期和时间函数主要用来处理日期和时间值,本篇主要介绍各种日期和时间函数的功能和用法,一般的日期函数除了使用date类型的参数外,也可以使用datetime类型的参数,但会忽略这些值的时间部分.相同 ...
- SQL Server安全(11/11):审核(Auditing)
在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...