RabbitMQ快速入门
1.什么是MQ
消息总线(Message Queue),是一种跨进程,异步的通讯机制,用于上下游传递消息。由消息系统来确保消息的可靠性。
2.RabbitMQ是干什么用
用于异步处理、解耦、流量削峰、错峰控流、数据分发、日志收集等。。。
3.RabbitMQ衡量标准
服务性能、数据存储,集群架构
4.RabbitMQ特点
1.开源、性能优秀、稳定性保障
2.提供可靠性消息投递模式,返回模式
3.与Spring AMQP完美整合,API丰富
4.集群模式丰富、表达式配置、HA模式、镜像队列模型
5.保证数据不丢失的前提下做到高可靠性、高可用性
5.RabbitMQ优势
1.可靠性:比如持久化、传输确认、发布确认
2.灵活的路由:消息进入队列之前,通过Exchange来路由消息
3.消息集群:多个RabbirMQ服务器可以组成一个集群,形成一个逻辑Broker
4.高可用:队列可以在集群中的机器上进行镜像,使得在部分节点出现问题的情况下队列仍然可以使用
5.多种协议:支持多种消息队列协议,如STOMP、MQTT等
6.多种语言客户端:几乎支持所有常用的语言,如:java、.NET、等
7.管理界面:提供了易用的用户界面,使得用户可以监控和管理消息Broker的许多方面
8.跟踪机制:如果消息异常,RabbitMQ提供了消息的跟踪机制,开发者可以找出发生了什么
9.插件机制:提供了许多插件,来从多方面进行扩展,也可以编辑自己的插件
6.AMQP(高级消息队列协议)
Rabbitmq是实现AMQP的消息中间件的一种,主要是为了实现系统之间的双向解耦而实现的。当生产者大量生产数据时,消费者无法快速消费,那么就需要一个中间层,保存这个数据。
主要特征是面向消息、队列、路由、可靠性、安全
7.RabbitMQ各组件功能
Broker:标识消息队列服务器实体
Virtual Host:虚拟主机,标识一批交换机、消息队列和相关的对象。每个vhost本质就是迷你版的RabbitMQ服务 器,vhost是AMQP概念的基础
Exchange:交换器,用来接收生产者发送的消息并将消息路由给服务器中的队列
Queue:消息队列,用来保存消息知道发送给消费者。
Banding:绑定,用于消息队列和交换器之间的关联
Channel:通道,消息读写等操作在通道中进行,客户端可以建立多个通道,没饿通道代表一个会话
Connection:网络连接,应用程序和Server的网络连接,TCP连接
Publisher:消息的生产者
Consumer:消息的消费者
Message:消息,是由消息头和消息体组成。
8.常用Exchange
RabbitMQ常用交换器类型有:direct、topic、fanout、headers四种
1.direct:该类型的交换器将所有发送到该交换器的消息转发到RoutingKey指定的队列中,也就是说路由到 BindingKey或RoutingKey完全匹配的队列中
2.topic:该类型交换器将所有发送到Topic Exchange的消息转发到所有RoutingKey指定的Topic的队列上。
Exchange将RoutingKey和某个Topic进行模糊匹配,其中【米】用于匹配一个词,【#】用于匹配一个或多个词。例如【com.#】能匹配到【com.rabbit.mq】和【com.rabbit】,而【com.米】只能匹配到【com.rabbit】
3.fanout:该类型交换器不处理路由建,会把所有发送到交换器的消息路由到所有绑定的队列中。优点是转发消 息最快,性能最好。
4.headers:该交换器不依赖于路由规则来路由消息,而是根据消息内容中的headers属性进行匹配,性能差,实 际中不常用。
9.TTL
TTL:生存时间,RabbitMQ支持消息的过期时间,一共两种。
-
在消息发送时可以进行指定。通过配置消息体的properties,可以指定当前消息的过期时间
-
在创建Exchange时可进行指定。从进入消息队列开始计算,只要超过了队列的超时时间配置,那么消息会自动清除。
10.死信队列DLX
死信队列DLX:利用DLX,当消息在一个队列中变成死信(dead message)之后,它能被重新publish到另一个 Exchange,这个Exchange就是DLX。
DLX也是一个正常的Exchange,和一般的Exchange没有区别,它能在任何队列上被指定,实际上就是设置了某个队列的属性。
当这个队列有死信时,RabbieMQ会自动将这个消息重新发布到设置的Exchange上,进而被路由到另一个队列。
11.消息变成死信的几种情况
1.消息被拒绝并且requeue等于false
2.消息TTL过期
3.队列达到最大长度
12.死信队列设置
需要设置死信队列的Exchange和Queue,然后通过RoutingKey进行绑定
只需要监听该死信队列即可处理死信消息,还可以通过死信队列完成延时队列
13.如何保证幂等性
消费端实现幂等性,就意味着我们的消息永远不会消费多次,即使我们收到了多条一样的信息。
-
唯一ID+指纹码机制,利用数据库主键去重
-
14.消费端限流(流量削峰)
当海量消息瞬间推送过来,单个客户端无法同时处理那么多数据,严重会导致系统宕机。这时,需要削峰。
RabbitMQ提供了一种qos(服务质量保证)功能。即在非自动确认消息的前提下(非ACK),如果一定数目的消息(通过基于consume或者channel设置qos的值)未被确认前,不进行消费新的消息。

浙公网安备 33010602011771号