Rabbitmq消息中心_消息中心总体方案
消息中心方案
一、消息中心简介
为了将各个应用系统之间进行业务解耦,对业务的透明化处理及技术架构的统一管理,方便对各应用的整体把控,保证系统的稳定性,也方便各应用的消息中间件的快速搭建,因此搭建消息中心,提供整体的解决方案。
相对于传统应用间定时或事件驱动获取数据的方式,使用消息中心让各应用感知其他应用的变动,采用主动推送的方式对数据的变化进行通知。
二、消息中心业务场景
2.1应用系统间解耦合
应用之间的业务耦合过深,应用中的单个服务不可用可能会导致大面积的业务故障。
2.2 异步
应用中或应用间的业务调用存在同步方法,调用时间过长导致性能下降,用户体验差。例如用户登录时,需要记录用户的审计日志等信息,需要消耗时间,但是这是用户登录所不必须的,使用消息中心后可异步实现,从而节约不必要的时间,快速登录提高用户的登录体验。
2.3 业务数据变化通知
各应用之间的数据变化需要通知其他应用并做相应的数据处理,比如基础数据的业务变化需要通知到相关的业务系统。
2.4 业务事件通知
各业务系统的通知、提醒、待办、待阅等信息发送到消息中心,由消息中心再发送到对应的负责人。
2.5 流量控制
流量控制,可以对大数据量的数据上传通过消息中心异步保存,提高系统的性能和稳定性。
2.6 大数据交换空间
应用中有大量历史数据需要迁移或者需要大数据量进行进行堆积处理,可通过消息中心进行中转。
三、消息中心结构组成
3.1 认证授权和访问控制
1)认证授权
第一:检查链接消息中心的用户是否有使用虚拟主机的权限,如果没有拒绝链接;
第二:检查是否有权限操作虚拟主机中的资源(交换机和队列)。
通过以上的检查机制,消息中心可以对用户能够访问的资源列表进行控制,从而达到管理的目的。
2)访问控制
对以上的认证授权机制外,还可以对接入消息中心的客户端(发送端和接收端)使用ip列表和接入的服务端检查进行访问控制,可使用插件rabbitmq_auth_backend_ip_rang或rabbitmq_auth_backend_amqp;
3.2 可靠性
消息发送的可靠性需要保证:消息发送者把消息发送到消息中心,消息中心的消息存储和消息中心把消息投递给消息接收者。
其中消息中心与消息发送端和接收端部门需要消息发送一致性进行支持,数据操作与消息发送放置在同一事务中,要不同时成立要不同时不成立。对于消息中心本身的稳定及存储安全保证设计一下的架构进行保证:
对最终消息架构选型Rabbitmq集群部署,并提供只是一个的磁盘节点(Disc)和多个内存节点。使用HAProxy对集群进行负载均衡分发,还可以对HAProxy进行主备部署用Keepalived进行负载。
3.3 安全
消息中心的发生端和接收端的安全主要基于ssl和ca认证进行安全管理,可参见《消息中心安全方案》。
3.4 消息追踪
发送的所有消息进行记录,能够进行查找追踪,可使用插件rabbitmq_tracing(该插件官方标注为实验性插件),详细信息参见《消息追踪方案》。
3.5 消息日志分析
对于发送的消息进行转存,然后根据数据的进行各种维度的分析。
四、消息中心对应用的支持
各应用接入消息中心时候,根据不同的业务要求消息中心需要提供以下支持:
4.1 消息发送一致性
消息发送与应用的业务操作要求强一致性(两者要不同时成立要不同时失败)的需要提供相应的支持,具体可参见《消息中心一致性方案》。消息发送的一致性要求保证与返回消息状态的速度成反比,平台可以根据消息发送一致性强弱要求和对性能的要求提供一下三种方案。
1)同步方式的完全一致性
将发送消息和业务操作在发送端用进行事务管理,该情况是采用同步方式进行支持,发送消息的效率会比较慢,但是是唯一能保证完全一致性的方案。
2)异步到交换器的一致性
异步到交换器的一致性是指业务的操作与消息的发送同样采用事务进行管理,但是消息一致性要求不是特别高(比如登录大平台的时候会产生一条登录的审计信息,但是该消息有没有被接收端接收,对平台的影响可以忽略并且相关数据的数据量特别大,则可采用该一致性方案)。该方案的消息保证消息进入交换器后异步返回结果。
3)异步到消费端的一致性
异步到消费端的一致性是指数据一致性和处理性能都有一定要求的情况下,消息发送端异步感知消费端对消息的处理。
4.2 消息发送优先级设置
当消息中心内部消息堆积量比较大的时候,消息发送的优先级直接关系到消息接收时效性,并且在同步一致性的情况下直接影响发送的应用的反应效率。
4.3 消息延迟发送
延迟消息消息是指消息发送端发送指定时间后消息接收端才接收到消息。比如用户添加一张订单后,要求在30分钟之内进行付款,那可以要求消息发送端发送消息30分钟后接收端再去检查用户的付款情况,并做相应处理。
延迟发送(具体参见《消息中心延迟发送方案》):
1)可以通过rabbitmq-delayed-message-exchange插件实现;
2)需要rabbitmq的ttl与dle进行实现,延迟可以。架构大致如下:
4.4 保证消息顺序
保证消息顺序:对于多条依赖顺序的消息表达一个信息的时候,需要消息消费者可以识别多条消息的顺序性,以正确读取消息的内容。应用场景:例如先后发送两天消息,对同意用户修改信息和删除用户,接收端接收的消息是先进行删除操作,在进行修改操作。
4.5 重复消息处理
由于消息发送各个环节、消息发送内部机制等原因,可能会导致一条消息发送之后消息接收端接收到多条同样的消息,此时需要消息接收端能够判断并处理相同消息或消息中心保证同一条消息消费端只接收一次。
五、应用接入管理办法
为了方便各应用能快速接入消息中心加快开发进度,方便消息中心对接入的应用进行统一管理,也为后续消息中心进行消息发送的日志和统计信息等开展(对消息中心的健壮性功能性的扩展),从以下方面制定接入消息中心的管理办法(具体参见《消息中心接入管理办法》):
5.1 应用管理
1)对所有的铁路管理系统的应用进行编号和编码命名(比如基础平台编号为1,编码为base,即时通编号为5为jst)。
2)接入消息中心时为该应用创建命名的用户进行管理:一对一或一对多情况,在按照发送端的应用创建的用户内部创建虚拟主机,并创建相应的资源(exchange和queue);多对一的情况按照接收端的应用创建的用户内部创建虚拟主机;多对多创建单独的应用并在内部进行关联;
3)按照以上的管理办法为每一类消息进行统一的资源编号,并且进行全局统一管理(比如平台1的审计信息和登录审计的编号为1-1和1-2)。
5.2 消息体管理
1)消息设置唯一ID进行管理;
2)消息应用包含所属应用的编号,如平台1消息编号为1;
3)消息设置发送时间(方便追踪);
六、应用接入
7.1 前期对接
各应用接入消息中心需要满足以上的场景,若不符合以上场景却想接入的需要与基础平台组进行沟通,提出接入理由和应用场景等等。最后取得基础平台组同意。
7.2 填写接入对接文档
按照《消息中心接入方案模板》填写接入消息中心的一下信息:
1)发送方、接收方;
2)消息发送的数据量;
3)大致消息内容;
4)对消息发送一致性的要求;
5)消息发送的优先级;
6)是否需要支持延迟发送消息;
7)是否需要支持消息发送顺序控制;
8)重复发送消息处理的支持。
7.3 审核并接入
对接入文档进行审核,并分析应用现有消息中心是否对即将接入的应用的业务支持,并按照以上的”应用接入管理办法”为应用创建接入条件,并进行统一管理。
Rabbitmq消息中心_消息中心总体方案相关推荐
- Rabbitmq消息中心_消息追踪
消息追踪方案 一.消息追踪介绍 消息中心的消息追踪需要使用Trace实现,Trace是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试.排错.可通过插件形式提供可视化界面 ...
- java 消息队列_消息队列-RabbitMQ在JAVA中的应用(1)
一.环境准备 安装RabbitMq 安装可查看另外文章本文就不做介绍了. 本文使用的erl和RabbitMQ版本分别是10.4和3.7.15 二.进入正题 1.创建SpringBoot项目 1.1.生 ...
- rabbitmq导出队列_消息队列BCMQ在大云运维管理平台BCDeepWatch中的应用
友情提示:全文约2600字,预计阅读时间12分钟 摘要 消息队列作为重要的中间件,广泛用于分布式系统中各子系统间的异步解耦:本文主要介绍了大云消息队列中间件BC-MQ在BC-DeepWatch中的应用 ...
- weblogic jms消息 删除_消息队列与消息中间件概述:消息中间件核心概念与技术选型...
什么是消息? "消息"是在两台计算机间传送的数据单位. 消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 什么是队列? 队列(Queue)队列是一种先进先出 ...
- 消息队列_消息队列:kafka
概念 kafka是一个分布式的基于发布/订阅模式的消息队列,主要用于大数据实时处理领域. 要理解kafka首先要有分布式的概念,要有消息队列的概念.分布式系统最大的优势就是解耦和削峰,这种情况下,A系 ...
- python 消息框架_消息框架message
在网页应用中,我们经常需要在处理完表单或其它类型的用户输入后,显示一个通知信息给用户. 对于这个需求,Django提供了基于Cookie或者会话的消息框架messages,无论是匿名用户还是认证的用户 ...
- RabbitMq消息中心_消息中心一致性
消息中心一致性解决方案 1.介绍 消息发送一致性是指产生消息的业务动作和消息的发送一致,两者要不同时成功或失败.在确定使用rabbitmq作为消息中心的实现框架后,消息发送的一致性应结合实际的框架实现 ...
- php 消息队列_消息队列篇——windows本地搭建RabbitMQ Server
前言: 最近的PHP项目中有使用AMQP,解耦一些业务性的功能模块.因为工作使用的是线上Linux搭建,为了方便测试所以我决定本地搭建一个MQ服务. RabbitMQ简介: MQ全称为Message ...
- 队列和消息队列_消息队列概述[幻灯片]
队列和消息队列 昨天,我进行了一次演讲,探讨了使用消息队列的所有方面. 我以前曾写过"您可能不需要消息队列" –现在的结论有些细微差别,但我仍然坚持简单性的观点. 演讲探讨了使用消 ...
最新文章
- untitled与前端——初学
- 在Vivado中,使用锁定增量编译技术进行增量综合布局布线
- android中暂停服务,Android暂停服务,线程,Asynctask?使用postdelayed的处理程序呢?...
- SAP ITS mobile 简介
- zookeeper+kafka配置
- atoi函数_吊打面试官 | 腾讯经典考点写代码实现atoi函数
- Git 命令 checkout、reset、revert、reflog 、merge 使用介绍
- interlib系统服务器,Interlib图书馆集群管理系统.docx
- 数据库update方法同时更新多条数据
- pygame 画图练习
- 【机器学习】TensorFlow共享GPU资源
- gwt php,java – 启动GWT项目的PHP程序员的任何好技巧?
- 什么是TF-IDF?
- Github上3.5k star 的微博爬虫,很赞!
- 利用水文分析方法提取山脊、山谷线
- 阿里视觉AI的开放平台之路
- 有限体积法(10)——格式精度与待定系数法
- ArcMap 导入 wrl_【丽爱妆】导入液怎么用 什么时候用
- 代数笔记-第四章 线性算子
- apache基于域名的虚拟主机配置