文章目录
- 1.什么是RabbitMQ?为什么使用RabbitMQ?
- 2.RabbitMQ有什么优缺点?
- 3.什么是元数据?元数据分为哪些类型?包括哪些内容?与cluster相关的元数据有哪些?元数据是如何保存的?元数据在cluster中是如何分布的?
- 4.在单node系统和多node构成的cluster系统中声明queue、exchange,以及进行binding会有什么不同?
- 5.客户端连接到cluster中的任意node上是否都能正常工作?
- 6.若cluster中拥有某个queue的owner node失效了,且该queue 被声明具有durable属性,是否能够成功从其他node上重新声明该 queue ?
- 9.RabbitMQ的使用场景有哪些?
- 10.RabbitMQ有哪些重要的角色?
- 8.RabbitMQ 怎么避免消息丢失?
- 11.如何确保消息正确地发送至RabbitMQ?
- 18.如何确保消息接收方消费了消息?
- 19.如何避免消息重复投递或重复消费?
- 12.要保证消息持久化成功的条件有哪些?
- 13.RabbitMQ 有几种广播类型?
- 14.vhost 是什么?起什么作用?
- 15.消息基于什么传输?
- 7.RabbitMQ 的消息是怎么发送的?
- 17.消息怎么路由?
- 20.死信队列
- 21.TTL
- 22.延时队列
- 9.如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?
- 7.消息队列积压怎么办
- 8.各种MQ的比较
1.什么是RabbitMQ?为什么使用RabbitMQ?
RabbitMQ是一款开源的消息中间件,可以用它来:应用解耦、异步提速、削峰填谷。
1.应用解耦
2.异步提速
3.削峰填谷
2.RabbitMQ有什么优缺点?
优点:应用解耦、异步提速、削峰填谷。;
缺点:
3.什么是元数据?元数据分为哪些类型?包括哪些内容?与cluster相关的元数据有哪些?元数据是如何保存的?元数据在cluster中是如何分布的?
在非cluster模式下,元数据主要分为Queue元数据(queue名字和属性 等)、Exchange元数据(exchange名字、类型和属性等)、Binding元数据 (存放路由关系的查找表)、Vhost元数据(vhost范围内针对前三者的名字空 间约束和安全属性设置)。
在cluster模式下,还包括cluster中node位置信息和node关系信息。元数据按照erlang node 的类型确定是仅保存于RAM中,还是同时保存在RAM和disk上。元数据在cluster中是全 node 分布的。
4.在单node系统和多node构成的cluster系统中声明queue、exchange,以及进行binding会有什么不同?
当你在单node上声明queue时,只要该node上相关元数据进行了变 更,你就会得到Queue.Declare-ok回应;而在cluster上声明queue,则要 求cluster上的全部node都要进行元数据成功更新,才会得到 Queue.Declare-ok回应。另外,若node类型为RAM node则变更的数据 仅保存在内存中,若类型为disk node则还要变更保存在磁盘上的数据。
5.客户端连接到cluster中的任意node上是否都能正常工作?
是的。客户端感觉不到有何不同。
6.若cluster中拥有某个queue的owner node失效了,且该queue 被声明具有durable属性,是否能够成功从其他node上重新声明该 queue ?
不能,在这种情况下,将得到404 NOT_FOUND错误。只能等queue所 属的node恢复后才能使用该queue。但若该queue本身不具有durable 属性,则可在其他node上重新声明。
9.RabbitMQ的使用场景有哪些?
(1)消息队列在项目中的使用
①锁库存:我可以在锁库存时一旦锁定成功,发个消息给交换机,经过延时队列,30分钟后路由到解锁库存服务那边,解锁库存那边会看用户取消订单了没有、订单成功了没有来决定是否需要解锁库存;
②下订单:一下单成功就给RabbitMQ发消息,经过延时队列20分钟以后到达订单的释放服务,假如用户没付款,那么此时就可以进行关闭订单;
③支付宝异步通知:有用户完成订单,支付宝就会按照你的外网地址给你发送RabbitMQ消息,你收到支付宝RabbitMQ消息,第一步先验证这个消息是支付宝发来的;验证完签名然后就是获取支付宝发送来的消息然后提取重要的信息到“交易流水”表里面,另外更新mos_order表的“订单状态”
④秒杀服务:在秒杀服务中用户如果占位成功就发送RabbitMQ消息给gulimall-order表示要给该用户下单啦。
gulimall-order一直监听着那边发来的消息,收到消息后就保存订单信息然后保存订单项信息
具体的查看:day03_《谷粒商城》的完整流程(详细版二)
(2)RabbitMQ的使用场景
①应用内的同步变异步,比如订单处理,就可以将订单信息放到队列,订单微服务从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。
②跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子