1、为什么使用MQ?MQ的优点
简答 :
异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。
应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。
流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请
求。
日志处理 - 解决大量日志传输。
消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通
讯。比如实现点对点消息队列,或者聊天室等。
记忆:
主要是:解耦、异步、削峰。
2、消息队列有什么优缺点?RabbitMQ有什么优缺点?
优点上面已经说了,就是在特殊场景下有其对应的好处
,
解耦
、
异步
、
削峰
。
缺点有以下几个:
系统可用性降低
本来系统运行好好的,现在你非要加入个消息队列进去,那消息队列挂了,你的
系统不是呵呵了。因此,系统可用性会降低;
系统复杂度提高
加入了消息队列,要多考虑很多方面的问题,比如:一致性问题、如何保证消息
不被重复消费、如何保证消息可靠性传输等。因此,需要考虑的东西更多,复杂
性增大。
一致性问题
A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,
要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,
咋整?你这数据就不一致了。
所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对
它带来的坏处做各种额外的技术方案和架构来规避掉,做好之后,你会发现,妈
呀,系统复杂度提升了一个数量级,也许是复杂了 10 倍。但是关键时刻,用,
还是得用的。
3、
Kafka、ActiveMQ、RabbitMQ、RocketMQ 有
什么优缺点?
ActiveMQ是老牌的消息中间件,国内很多公司过去运用的还
是非常广泛的,功能很强大。
问题在于没法确认ActiveMQ可以支撑互联网公司的高并发、高负载以及高
吞吐的复杂场景,在国内互联网公司落地较少。而且使用较多的是一些传统企
业,用ActiveMQ做异步调用和系统解耦。
4、消息的重复问题
造成消息重复的根本原因是:网络不可达。
所以解决这个问题的办法就是绕过这个问题。那么问题就变成了:如果消费端收
到两条一样的消息,应该怎样处理?
消费端处理消息的业务逻辑保持幂等性。只要保持幂等性,不管来多少条重复消
息,最后处理的结果都一样。保证每条消息都有唯一编号且保证消息处理成功与
去重表的日志同时出现。利用一张日志表来记录已经处理成功的消息的 ID,如
果新到的消息 ID 已经在日志表中,那么就不再处理这条消息。
5、什么是RabbitMQ?
RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的消息中间件
6、rabbitmq 的使用场景
(
1)服务间异步通信
(2)顺序消费
(3)定时任务
(4)请求削峰
7、RabbitMQ的工作模式
一.simple模式(即最简单的收发模式)
1.消息产生消息,将消息放入队列
2.消息的消费者(consumer) 监听 消息队列,如果队列中有消息,就消费掉,消息被
拿走后,自动从队列中删除(隐患 消息可能没有被消费者正确处理,已经从队列中
消失了,造成消息的丢失,这里可以设置成手动的ack,但如果设置成手动ack,处
理完后要及时发送ack消息给队列,否则会造成内存溢出)。