赞
踩
消息中间件(消息队列)是基础数据结构中“先进先出”的一种数据结构,是分布式系统中重要的组件,主要解决应用解耦,异步消息(异步提速),流量削锋(并发请求堆积MQ,MQ持续消费)和消息通讯等问题实现高性能,高可用,可伸缩和最终一致性架构。使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
优势 | 描述 |
---|---|
应用解耦 | 一个业务需要多模块共同实现,用MQ发送消息,其余模块消费MQ消息,即可实现业务 |
异步消息 | 主业务执行后从属业务通过MQ,异步执行,减低业务的响应时间,提高用户体验。 |
流量削锋 | 高并发情况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪。 |
劣势 | 描述 |
---|---|
系统可用性降低 | 外部依赖越多,系统稳定性越差,MQ 宕机,业务造成影响 |
系统复杂度提高 | 以前系统间是同步远程调用,Mq是异步,需要考虑消息丢失、消息重复消费、消息传递的顺序性。 |
业务一致性 | 主业务和从属业务一致性的处理,主业务A向从业务BCD发送消息,BC处理成功,D处理失败 |
MQ是消息通信的模型,并不是具体实现。实现MQ的有两种主流方式:AMQP、JMS。
AMQP是一种协议,而JMS是Java消息服务应用程序接口。
两者区别
AMQP | JMS |
---|---|
AMQP是通过规定协议来统一数据交互的格式 | JMS是定义统一的接口,来对消息操作进行统一 |
AMQP只是协议,不规定实现方式,是跨语言的 | JMS限定必须使用Java语言 |
AMQP的消息模式更丰富 | JMS规定了两种消息模式 |
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
单机吞吐量 | 万级,比 RocketMQ、Kafka 低一个数量级 | 同 ActiveMQ | 10 万级,支撑高吞吐 | 10 万级,高吞吐,一般配合大数据类的系统来进行实时数据计算、日志采集等场景 |
topic 数量对吞吐量的影响 | topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降,这是 RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic | topic 从几十到几百个时候,吞吐量会大幅度下降,在同等机器下,Kafka 尽量保证 topic 数量不要过多,如果要支撑大规模的 topic,需要增加更多的机器资源 | ||
时效性 | ms 级 | 微秒级,这是 RabbitMQ 的一大特点,延迟最低 | ms 级 | 延迟在 ms 级以内 |
可用性 | 高,基于主从架构实现高可用 | 同 ActiveMQ | 非常高,分布式架构 | 非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 |
消息可靠性 | 有较低的概率丢失数据 | 基本不丢 | 经过参数优化配置,可以做到 0 丢失 | 同 RocketMQ |
功能支持 | MQ 领域的功能极其完备 | 基于 erlang 开发,并发能力很强,性能极好,延时很低 | MQ 功能较为完善,还是分布式的,扩展性好 | 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用 |
RabbitMQ(RabbitMQ官网)是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,,它是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计,是一种应用程序之间的通信方法,消息队列广泛应用在分布式系统中。
1.可靠性(Reliability)
RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。
2.灵活的路由(Flexible Routing)
在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。
3.消息集群(Clustering)
多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。
4.高可用(Highly Available Queues)
队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
5.多种协议(Multi-protocol)
RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。
6.多语言客户端(Many Clients)
RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。
7.管理界面(Management UI)
RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。
8.跟踪机制(Tracing)
如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。
9.插件机制(Plugin System)
RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。
术语 | 描述 |
---|---|
producer | 消息生产者,数据的发送方。消息生产者连接RabbitMQ服务器然后将消息投递到Exchange。 |
Consumer | 消息消费者,数据的接收方。消息消费者订阅队列,RabbitMQ将Queue中的消息发送到消息消费者。 |
Connection | 网络连接,生产者与消费者 和 broker 之间的 TCP 连接 |
Channel | 信道。消息读写等操作在信道中进行。Channel 是在 connection 内部建立的逻辑连接,channel 之间是完全隔离的。多路复用连接中的一条独立的双向数据流通道。为会话提供物理传输介质。Channel 作为轻量级的连接, 极大减少了操作系统建立 TCP 连接开销。 |
Broker | 接收和分发消息的应用,标识消息队列服务器实体,或者说是消息中间件的服务节点,一个broker就好比是一个RabbitMQ 服务器。 |
Virtual host | 虚拟主机,标识一批交换机、消息队列和相关对象。每个Virtual Hosts相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的。exchange、queue、message不能互通。类似MySQL中的db。 |
Exchange | 生产者将消息发送到Exchange(交换器),由Exchange将消息路由到一个或多个Queue中(或者丢弃)。Exchange并不存储消息。常用的交换器常用类型有direct、topic、fanout、headers四种,每种类型对应不同的路由规则。 |
Queue | 消息队列,用于存储消息。消息消费者就是通过订阅队列来获取消息的,RabbitMQ中的消息都只能存储在Queue中,生产者生产消息并最终投递到Queue中,消费者可以从Queue中获取消息并消费。 |
Binding | 绑定,交换器和消息队列之间的虚拟连接。信息被保存到 exchange 中的查询表中,用于 message 的分发依据 |
RoutingKey | 路由键,生产者将消息发送给交换器的时候,会发送一个RoutingKey,用来指定路由规则,这样交换器就知道把消息发送到哪个队列。而routing key需要与Exchange Type及binding key联合使用才能最终生效。 |
Client | AMQP连接或者会话的发起者,客户端生产和消费消息,服务器存储和路由消息。 |
RabbitMQ提供了6种模式(官网模式介绍):简单模式,work模式,Publish/Subscribe发布与订阅模式,Routing路由模式,Topics主题模式,RPC远程调用模式
1.生产者发送消息
1. 生产者创建连接(Connection),开启一个信道(Channel),连接到RabbitMQ Broker;
2. 声明队列并设置属性;如是否独占连接,是否持久化,是否自动删除;
3. 将路由键与队列进行绑定;
4. 发送消息至RabbitMQ Broker;
5. 关闭信道;
6. 关闭连接;
7.
2.消费者接收消息
1. 消费者创建连接(Connection),开启一个信道(Channel),连接到RabbitMQ Broker
2. 向Broker 请求消费者相应队列中的消息,设置相应的回调函数;
3. 等待Broker回应闭关投递响应队列中的消息,消费者接收消息;
4. 确认(ack,自动确认)接收到的消息;
5. RabbitMQ从队列中删除相应已经被确认的消息;
6. 信道与连接不关闭,监听消息
1.访问(RabbitMQ官网)点击Get Started
2.选择下载或者查看教程文档
3.点击Download+Installation ,据系统选择下载,需注意rabbitMq与erlang 版本对应关系
4.点击Erlang Versions查看rabbitMq与erlang版本对应关系
5.点击RabbitMQ Tutorials,查看RabbitMq文档教程
6.使用Docker快速安装RabbitMq:RabbitMq的安装
RabbitMQ安装好后,访问控制台地址:
http://ip地址:15672
,使用用户名:guest和密码:guest登录。然后进行相应的管理操作。
1.角色说明
角色 | 描述 |
---|---|
超级管理员(administrator) | 可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。 |
监控者(monitoring) | 可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) |
策略制定者(policymaker) | 可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。 |
普通管理者(management) | 仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。 |
其他 | 无法登陆管理控制台,通常就是普通的生产者和消费者。 |
2.添加用户
在RabbitMQ中可以使用虚拟消息服务器Virtual Host,每个Virtual Hosts相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的。exchange、queue、message不能互通。 Virtual Name一般以/开头。
1.创建Virtual Hosts
2.设置Virtual Hosts权限
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。