栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

rabbitMQ

rabbitMQ

目录

1、什么是rabbitMQ?

2、为什么要使用rabbitMQ?

3、使用rabbitMQ的场景?

4、什么是消息?

5、什么是exchange?

6、什么是信道?

7、什么是broker?

8、如何确保消息正确的发送到rabbitMQ,如何确保消费者正确的消费了消息?

9、如何解决消息重复投递或者消息重复消费的问题?

10、消息基于什么传输?

11、常见的消息分发模式有哪几种?

12、rabbitMQ的缺点?

13、Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?

14、rabbitMQ是如何保证高可用的?

15、如何保证消息的可靠传输,消息丢失怎么办?


1、什么是rabbitMQ?

采用AMQP高级消息队列协议的一种消息队列技术,特点就是消费不需要确保提供方存在,实现了服务之间的高度解耦。

2、为什么要使用rabbitMQ?

围绕“解耦”、“异步、“削峰”聊

1、在分布式系统下,具有异步、削峰、负载均衡等高级功能

2、拥有持久化机制,进程中的消息,队列中的消息,可以保存下来

3、实现消费者和生产者之间的解耦

4、高并发场景下,利用消息队列可以使同步访问变成串行访问,达到一定限流作用

5、可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单。

3、使用rabbitMQ的场景?

1、服务间异步通讯

2、顺序消费

3、定义任务

4、请求削峰

4、什么是消息?

消息是不具名的,具有消息头和消息体。消息体是不透明的,消息头通常由可选的属性构成,如

路由键、相对于其他消息的优先权、是否需要持久化等

5、什么是exchange?

交互器,用于接收生产者发送的消息,并将这些消息根据分发策略路由至指定的队列。

6、什么是信道?

信道(channel),多路复用连接中的一条数据传输通道。信道是建立在TCP连接内的虚拟连接。对于系统来说,创建和销毁TCP连接都会产生较大开销。

7、什么是broker?

消息队列服务器实体。

8、如何确保消息正确的发送到rabbitMQ,如何确保消费者正确的消费了消息?

发送方确认模式

将信道设置成/confirm/i模式,所有在信道上发布的消息都会被指派一个唯一的ID,

一旦消息成功投放到目标队列或者成功写入磁盘后,信号会发送一个确认给生产者,(确认消息中包含此ID),如果rabbitMQ内部发生错误导致消息丢失,会发送一条nack消息。

发送方确认模式是异步的

接收方确认模式

消费者每收到一条消息后都必须进行确认。只有消费者确认了消息,rabbitMQ才能安全的将消息从队列中删除。

rabbitMQ针对两种特殊情况的处理

1、消费者接受了消息,在发送确认之前断开了连接或者取消了订阅。

rabbitMQ会将该消息重新分发给下一个订阅的消费者。(这里就会存在消息重复消费的问题)

2、消费者接受了消息,连接没有断开,却一直没有确认消息

rabbitMQ会认为该消费者繁忙,将不会给他分发更多的消息。

9、如何解决消息重复投递或者消息重复消费的问题?

在消息生产时,MQ内部针对每条生产者生产的消息生成一个 inner-msg-id,作为去重的依据,避免重复的消息进入队列。

在消息消费时,要求消息体中必须包含一个bizId,作为去重的依据,避免重复消费。

10、消息基于什么传输?

由TCP连接的创建和销毁开销大,并且并发数量受系统资源控制,会造成性能瓶颈。

所以rabbitMQ使用信道的方式来传输数据,信道是建立在真实TCP连接内的虚拟连接,且tcp连接上的信道数量是没有限制的。

11、常见的消息分发模式有哪几种?

1、fanout:  如果交换机接收到消息,会广播到所有绑定的队列上

2、direct:  路由键完全匹配策略

3、topic: 路由键模糊匹配策略

12、rabbitMQ的缺点?

1、系统可用性降低

2、系统复杂度提高

3、数据一致性问题

13、Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?

14、rabbitMQ是如何保证高可用的?

1、rabbitMQ有三种模式,单机模型,集群模式,镜像集群模式

普通集群模式,指多台机器启动多个rabbitMQ示例,每台机器启动一个。你创建的queue,只会存在于其中一个实例上,每个实例共享此队列的消息。

镜像集群模式,与普通集群模式的区别为 创建的queue,无论是元数据还是队列里的消息,每个实例都会保存一份。每次写消息,都会进行数据同步。

15、如何保证消息的可靠传输,消息丢失怎么办?

保证消息的可靠传输,从消息传输的三个阶段触发

1、保证生产者发送消息时不丢失

指:生产者发送消息的传输过程中由于网络等原因,造成消息丢失

解决办法: 

        ①、开启事务

 发送消息以后,如果rabbitMQ没有接收到,生产者会接收到异常报错,然后回滚事务,重发消息。接收到消息以后,会提交事务。

缺点:事务机制是同步的,太耗性能,吞吐量下降。

        ② 生产者开启/confirm/i模式

每次写消息都会分配一个innner-msg-id,如果写入成功,rabbitMQ会返回一个ack,失败会返回一个nack。/confirm/i模式是异步的,一般情况下,保证消息的可靠性,一般采用此方案。

2、保证rabbitMQ不丢失消息

解决办法: 开启rabbitMQ的持久化。

共分为两步  1、队列设置为持久化队列   2、 发送消息时将消息设置为持久化消息

一般情况下rabbitMQ持久化与/confirm/i模式配合使用,只有当接收消息并持久化完成后才返回ack给生产者

3、保证消费者不丢失消息 

原因:多是由于采用的自动ack模式,当消费到消息,还没进行业务处理,结果进程挂了。

解决办法:采用手动ack模式,处理完业务后,再手动ack.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662970.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号