导图社区 RabbitMQ
RabbitMQ是一个实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。它由Rabbit科技有限公司开发,并在2013年5月成为GoPivotal的一部分。发一些个人学习的积累及自己遇到的面试题,有需要的同学可以参考一下。受个人能力的影响,若有错误欢迎提出来大家讨论。
发一些个人学习的积累及自己遇到的面试题,有需要的同学可以参考一下。受个人能力的影响,若有错误欢迎提出来大家讨论。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
RabbitMQ
推模式与拉模式的区别?
推模式是生产者主动推消息给消费者,拉模式是消费者主动拉取队列消息。
怎么保证消息不重发,怎么做幂等设计?
消息在送入队列之前先写入mysql,然后消费消息时,更新一下该条消息在mysql的状态。这样收了哪些消息都知道。避免了重发。
消息中间件怎么保证消息的顺序性?
rabbitmq加锁。
kafka单个分区可以保证有序性,多个分区保证不了。
你说秒杀项目中用到死信队列当做延迟队列,RabbitMq没有延迟队列的功能吧?
其实这个延迟队列不是用来消费消息的,是使消息过期的。如果在一定时间内没有支付,这些订单就过期取消,此时要补redis的库存。
MQ怎么做到消息不丢失?
幂等设计
rabbitMQ与kafka有什么不同?
1.存储不同。rabbitmq存在内存,且不是冗余存储。kafka是可以从内存持久化到磁盘,冗余存储。
3.kafka因为采用零拷贝所以读取速度更快。同时,kafka将数据压缩存储,只有在使用时才解压,减少了io,所以写入更快。还有,kafka不是立马将数据刷入磁盘,而是达到一到量才写入,也减小了io,提高了写入的效率。最后,kafka是顺序存储,减少了磁盘读取时间,所以读写更快。
秒杀项目的延迟队列用什么来做?
用MQ来做,当消息过期后消息会进入死信队列,若这些消息在mysql中查出订单已支付就什么也不用管。若没有就取消订单并补redis库存。
如果用它来做电脑重启数据不就丢失了?
单台MQ重启存在丢消息的问题。用仲裁队列的MQ集群可以解决此问题。消息必须写入过半的副本才被提交,所以不存在数据不同步的问题。
一个生产者三个消费者,生产者发了10条消息序1到10,三个消费者收到的消息序号是多少?第一个1,4,7。第二个,2,5,8。第三个,3,6,9。它们平均分配消息。之前面试题。
主要三种交换机模式
fanout其实是广播式的,不需要路由键
direct,需要路由键,通过路由键将交换机与队列绑定
topict可实现广播也可以路由
*.x.*路由规则限定了数量
x.#路由规则不限定数量
amqp协议?
rabbitmq的三大好处
1.解耦
2.异步调用
3.流量消峰
RabbitMQ怎么做延迟队列?
将任务送入MQ,然后订阅队列的消息,异步处理任务。
死信队列
rabbitMQ的死信队列用过吗?
rabbitMQ的死信是怎么处理的?
生产者发到队列的消息,若消费者拒收又没有配置死信队列的话,消息会丢失。若配置了死信队列,拒收的消息会进入死信队列,避免了消息的丢失。
rabbitmq的channel是做什么用?
用于绑定交换机,是信息发送的通道。
假设有topicA 发送了三条消息1,2,3,有三个消费者群组Conumer1,Consumer2,Consumer3,Consumer1含1,2,3三个人,Consumer2 含4,5,6三个人,Consumer3含7,8,9三个人,那这9个人收到的消息是什么?
还要看topic有没有配路由键,配了按路由键匹配来接收。若没配就是广播方式,那么 consumer1收到1,2,3。 consumer2收到1,2,3。consumer3收也收到1,2,3。每个消费者群组收到相同的消息。
rabbitmq广播方式使用的是什么交换机?
fanout。