随笔 - 4,  文章 - 0,  评论 - 0,  阅读 - 5058

RabbitMQ简介

  MQP 即Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用协议的一个开发标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP规范发布。类比HTTP。
  2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0发布。RabbitMQ采用Erlang语言开发。Erlang语言由Ericson设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。

MQ的优势,为什么要使用MQ?

  1.应用解耦(提高容错性和可维护性)

  2.异步提速(与数据库串行、并行同理)

  3.削峰填谷(提高系统的稳定性)

  比如:前端发送五千条请求过来,但是后端能处理只有2千条,这时候服务器 就会炸掉,使用MQ后,前端与MQ交互,MQ就根据前端请求量以及后端能处理的数量 去相对缓慢但平缓的向后端发送请求,这样后端就能够处理完成大量请求而不会导致服务器崩溃

MQ的劣势

  1.系统可用性降低(系统引入的外部依赖越多,系统稳定性越差,一旦MQ宕机会对业务造成影响)——>如何保证MQ的高可用?

  2.系统复杂性提高 ——>如何保证消息不被丢失?

常见MQ及区别

 

 

MQ的工作模式

1、Work queues 2、Publish/subscribe 发布与订阅模式 3、Routing 路由模式 4、Topics 主题模式 5、Header 模式 6、RPC 远程调用模式

详情可看官方介绍:https://www.rabbitmq.com/getstarted.html

 

MQ的设计思路

  1. 可伸缩性: 设计为分布式的,例如分为nameBervice和broker;broker负责Topic消息存储、管理和分发等功能;bs就是一个注册中心、维护所有Brokers信息。这样通过水平扩展就提升了吞吐量和容量了。

  2. 可靠性: 数据要磁盘落地,来做到可恢复、持久化。然后顺序写随机读来提高性能。

  3. 容错性: 多个机器中有的宕机后,要有类似zookeeper的的投票选举功能,确保集群稳定运行。

 

MQ常见面试题

1.1、场景\业务

例:

需求:1.下单后,30分钟为支付,取消订单,回滚库存

2.新用户注册成功7天后,发送短信问候

解:使用MQ高级特效—延迟队列(设置多久消费这条消息)

P:MQ中并未提供延迟队列功能。但是可以使用:TTL+死信队列组合实现延迟队列的效果

1.2、消息积压、重复消费、消息丢失等怎么处理?解决方案?

消息积压:

一般出现消息积压基本上分为几种情况:

  1. 消费者消费消息的速度赶不上生产速度,这总问题主要是业务逻辑没设计好消费者和生产者之间的平衡,需要改业务流程或逻辑已保证消费度跟上生产消息的速,譬如增加消费者的数量等。

  2. 消费者出现异常,导致一直无法接收新的消息,这种问题需要排查消费的逻辑是不是又问题,需要优化程序。

    解决思路:

    1.拆分MQ,生产者一个MQ,消费者一个MQ,写一个程序监听生产者的MQ模拟消费速度(譬如线程休眠),然后发送到消费者的MQ,如果消息积压则只需要处理生产者的MQ的积压消息,不影响消费者MQ

    2.拆分MQ,生产者一个MQ,消费者一个MQ,写一个程序监听生产者的MQ,定义一个全局静态变量记录上一次消费的时间,如果上一次时间和当前时间只差小于消费者的处理时间,则发送到一个延迟队列(可以使用死信队列实现)发送到消费者的MQ,如果消息积压则只需要处理生产者的MQ的积压消息,不影响消费者MQ

    3.使用Redis的List或ZSET做接收消息缓存,写一个程序按照消费者处理时间定时从Redis取消息发送到MQ

    4.设置消息过期时间,过期后转入死信队列,写一个程序处理死信消息(重新如队列或者即使处理或记录到数据库延后处理)

重复消费:先说为什么会重复消费:正常情况下,消费者在消费消息的时候,消费完毕后,会发送一个确认消息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除;

但是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将消息分发给其他的消费者。

针对以上问题,一个解决思路是:保证消息的唯一性,就算是多次传输,不要让消息的多次消费带来影响;保证消息等幂性;

比如:在写入消息队列的数据做唯一标示,消费消息时,根据唯一标识判断是否消费过;

消息丢失:一.消息持久化

1.Exchange设置持久化:durable:true

2.Queue设置持久化

3.Message持久化发送

二.ACK确认机制

1.消息发送确认

2.消息接受确认

三.设置集群镜像模式

四.消息补偿机制

1.3、MQ使用场景、为什么使用MQ、MQ的优劣

1.4、使用MQ时遇到什么问题,怎么解决

 

进阶方向图:

posted on   九尾妖狐·  阅读(887)  评论(0编辑  收藏  举报
编辑推荐:
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· ASP.NET Core - 日志记录系统(二)
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· 实现windows下简单的自动化窗口管理
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示