RabbitMQ应用场景及特性

RabbitMQ是一款开源的消息队列中间件,拥有非常好用的管理控制面板,类似使用navicat一样,简便的操纵数据库。

应用场景

一、流量削峰

在一些并发量较高的场景下,比如秒杀活动,抢票等,同一时间访问量急剧增大,处理业务的服务器由于业务比较繁琐,比较脆弱,此时可以使用消息队列作为中转,大量请求先发送到消息队列,处理业务的服务器再根据自己的节奏,从消息队列中获取消息并处理。

二、解耦

如果服务器A直接与服务器B进行通信,当A这边想要修改代码,或者A服务挂了, 可能会导致服务器B需要修改代码。如果使用消息队列,服务器B只需要关注消息队列中的数据,不需要管服务器A中是怎么去写代码的。

三、异步

当我们想要将数据写入到数据库中,然后再同步到缓存中,此时我们发现,这是一条线性的方式,如果使用消息队列,将数据发送到消息队列,写入缓存的服务器和写入数据库的服务器去订阅消息队列,一旦有数据,就可以并行执行。

四、消息分发

当我们的系统想要再添加一个模块来获取之前的数据,就可以直接去订阅消息队列,后续消息就会被转发过来,然后就可以执行处理了。一旦下游想要上游的数据了,就添加一个订阅者即可。

工作流程

使用rabbitmq主要分为如下几部:

1)创建连接:Producer连接到RabbitMQ服务器,通过ConnectionFactory建立Connection,开启一个channel。

2)声明交换机队列以及绑定关系:Producer声明⼀个交换机(Exchange)和队列(Queue),并将队列绑定到交换机。

3)发布消息:Producer发送消息⾄RabbitMQ服务器。

4)消息存储及转发:RabbitMQ接收到消息,根据绑定关系进行消息分发,存储到相应队列中。

5)消费消息::消费者监听Queue,当消息到达时,从Queue中获取消息,处理后,向RabbitMQ发送消息确认。

6)消息删除:消息被确认后,RabbitMQ会把消息从Queue中删除。

特性

在RabbitMQ中主要有这么几个特性:

1)**发布确认:**用来保证可靠性的方式之一,运用在生产者一方。解决的是保证发布的消息能到达消息队列服务器以及消息能被交换机正确转发到队列。对应着两种模式:confirm和return模式。

2)**持久化:**用来保证可靠性的方式之一,运用在消息队列服务器。可以对交换机、队列、消息进行持久化,当服务器挂了,后续重启恢复消息。

3)**消息确认:**用来保证可靠性的方式之一,运用在消费者一方。可以通过配置的方式来选择,消息者在获取到消息时,是自动应答,还是手动应答,当接收到应答时,删除消息。

4)**重试机制:**在消息传递的过程中,可能会遇到网络故障等问题,rabbitmq还提供了重试机制,当消息发送失败,会进行重新发送。

5)**TTL:**过期时间,RabbitMQ提供了可以设置队列和消息的过期时间。设置队列的TTL,即队列中的所有消息的过期时间都为队列的TTL,或者可以单独设置消息的TTL。但需要注意设置消息TTL后,消息到了过期时间不一定会立马删除,需要等待队列前面的消息都过期了,才会删除。

6)**死信队列:**用来存放无法被消费的队列。当消息过期或者nack或者队列到达最大长度无法接收,此时消息会变成死信,然后根据配置,发送到死信交换机,再到死信队列中。

7)**延迟队列:**即等待一定时间后,消费者才可以消费这条消息。但RabbitMQ本身没有直接提供延迟队列的功能,但可以通过TTL+死信队列的方式进行实现或者添加一个RabbitMQ的官方延迟插件。

8)**事务:**将操作变成原子的,要么全部成功,要么相当于没执行。

9)**负载均衡、限流:**可以通过参数配置的方式来限定消费者所能保持最大未确认消息的数量。以此达到限流或者负载均衡的效果。

相关推荐
妙龄少女郭德纲1 小时前
基于Spark框架实现XGBoost模型
大数据·分布式·spark
sdg_advance1 小时前
RabbitMQ消费者确认和重复机制
rabbitmq·java-rabbitmq
晚枫20001 小时前
kafka发送事件的几种方式
spring boot·分布式·docker·容器·kafka·intellij-idea·linq
二进制杯莫停2 小时前
初识zookeeper
分布式·zookeeper·云原生
小宋10212 小时前
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
服务器·网络·rabbitmq
happycao1232 小时前
kafka消息发送几种方式
分布式·kafka
xuchengxi-java2 小时前
本地不能訪問linux的kafka服務
分布式·kafka
Fan2 小时前
Kafka 下载安装及使用总结
分布式·kafka
Java码农杂谈3 小时前
浅谈Tair缓存的三种存储引擎MDB、LDB、RDB
java·redis·分布式·后端·阿里云·缓存
学习3人组3 小时前
Hadoop分布式集群配置
大数据·hadoop·分布式