一文了解MQ

本文详细介绍了RabbitMQ、Kafka和EMQ在项目中的应用及其优缺点,包括如何保证消息不丢失、解决重复消费问题、处理消息堆积、确保消费顺序性以及各自高可用机制。重点探讨了各组件的使用场景、消息持久化、死信处理和延迟队列等关键特性,为企业服务通信和物联网通信提供了实用的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RabbitMQ

01- 你们项目中哪里用到了RabbitMQ ?

我们项目中很多地方都使用了RabbitMQ , RabbitMQ 是我们项目中服务通信的主要方式之一 , 我们项目中服务通信主要有二种方式实现 :

  1. 通过Feign实现服务调用
  2. 通过MQ实现服务通信

基本上除了查询请求之外, 大部分的服务调用都采用的是MQ实现的异步调用 , 例如 :

  1. 发布内容的异步审核
  2. 验证码的异步发送
  3. 用户行为数据的异步采集入库
  4. 搜索历史记录的异步保存
  5. 用户信息修改的异步通知(用户修改信息之后, 同步修改其他服务中冗余/缓存的用户信息)
  6. 静态化页面的生成
  7. MYSQL和Redis , ES之间的数据同步

02- 为什么会选择使用RabbitMQ ? 有什么好处 ?

选择使用RabbitMQ是因为RabbitMQ的功能比较丰富 , 支持各种消息收发模式(简单队列模式, 工作队列模式 , 路由模式 , 直接模式 , 主题模式等) , 支持延迟队列 , 惰性队列而且天然支持集群, 保证服务的高可用, 同时性能非常不错 , 社区也比较活跃, 文档资料非常丰富

连续三天都登录过app , 查询用户id

使用MQ有很多好处:

  • 吞吐量提升:无需等待订阅者处理完成,响应更快速

  • 故障隔离:服务没有直接调用,不存在级联失败问题

  • 调用间没有阻塞,不会造成无效的资源占用

  • 耦合度极低,每个服务都可以灵活插拔,可替换

  • 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件

使用MQ也有很多缺点:

  • 架构复杂了,业务没有明显的流程线,不好管理
  • 需要依赖于Broker的可靠、安全、性能

03- 使用RabbitMQ如何保证消息不丢失 ?

消息从发送,到消费者接收,会经理多个过程 , 其中的每一步都可能导致消息丢失

在这里插入图片描述

针对这些问题,RabbitMQ分别给出了解决方案:

  • 消息发送到交换机丢失 : 发布者确认机制publisher-confirm

    消息发送到交换机失败会向生产者返回ACK , 生产者通过回调接收发送结果 , 如果发送失败, 重新发送, 或者记录日志人工介入

  • 消息从交换机路由到队列丢失 : 发布者回执机制publisher-return

    消息从交换机路由到队列失败会向生产者返回失败原因 , 生产者通过回调接收回调结果 , 如果发送失败, 重新发送, 或者记录日志人工介入

  • 消息保存到队列中丢失 : MQ持久化(交换机持久化, 队列持久化 , 消息持久化)

  • 消费者消费消息丢失 : 消费者确认机制 , 消费者失败重试机制

通过RabbitMQ本身所提供的机制基本上已经可以保证消息不丢失 , 但是因为一些特殊的原因还是会发送消息丢失问题 , 例如 : 回调丢失 , 系统宕机, 磁盘损坏等 , 这种概率很小 , 但是如果想规避这些问题 , 进一步提高消息发送的成功率, 也可以通过程序自己进行控制
在这里插入图片描述

设计一个消息状态表 , 主要包含 : 消息id , 消息内容 , 交换机 , 消息路由key , 发送时间, 签收状态等字段 , 发送方业务执行完毕之后 , 向消息状态表保存一条消息记录, 消息状态为未签收 , 之后再向MQ发送消息 , 消费方接收消息消费完毕之后 , 向发送方发送一条签收消息 , 发送方接收到签收消息之后 , 修改消息状态表中的消息状态为已签收 ! 之后通过定时任务扫描消息状态表中这些未签收的消息 , 重新发送消息, 直到成功为止 , 对于已经完成消费的消息定时清理即可 !

04- 消息的重复消费问题如何解决的 ?

在使用RabbitMQ进行消息收发的时候, 如果发送失败或者消费失败会自动进行重试, 那么就有可能会导致消息的重复消费 , 具体的解决方案其实非常简单, 为每条消息设置一个唯一的标识id , 将已经消费的消息记录保存起来 , 后期再进行消费的时候判断是否已经消费过即可 , 如果已经消费过则不消费 , 如果没有消费过则正常消费

05- 如果有100万消息堆积在MQ , 如何解决 ?

解决消息堆积有三种思路:

    <
针对如何在单片机火灾报警系统中集成MQ-2烟雾传感器和DS18B20温度传感器,并通过全总线技术实现智能监控的问题,可以通过《单片机火灾报警系统设计:智能监控与应急响应》这一资料深入了解。该资料详细讲解了如何通过单片机技术结合传感器技术,实现对环境的实时监测和预警,提升火灾预防和应急响应能力。 参考资源链接:[单片机火灾报警系统设计:智能监控与应急响应](https://wenku.youkuaiyun.com/doc/45hqy8iesj?spm=1055.2569.3001.10343) 首先,MQ-2烟雾传感器是一个可以检测多种气体的传感器,对于火灾报警系统来说,它特别适合检测火灾产生的烟雾。而DS18B20数字温度传感器则能够精确测量环境温度,两者结合使用可以大大提升系统的准确性与可靠性。 在系统集成方面,你需要了解如何将这两个传感器连接到单片机上。MQ-2传感器输出的是模拟信号,而DS18B20传感器则是一个数字传感器。因此,需要先将MQ-2的模拟信号通过ADC(模数转换器)转换为数字信号,然后通过单片机的IO口读取DS18B20的数据。 全总线技术在这里指的是如何将这些数据通过某种总线协议发送出去,以便于系统的其他部分接收和处理。你可以使用I2C、SPI或自定义的总线协议来实现这一功能。在数据传输过程中,需要确保信号的抗干扰性能和传输的稳定性,这对于火灾报警系统来说至关重要。 最终,单片机需要对收集的数据进行处理,根据预设的阈值判断是否出现火灾预警。一旦检测到危险信号,系统便启动报警机制,及时通知相关人员采取措施。 《单片机火灾报警系统设计:智能监控与应急响应》一文中,还详细描述了系统的网络结构设计和单片机的选择,这些都是集成传感器和实现智能监控时需要考虑的重要方面。建议深入研究该资料,以获得更全面的技术实现方案和设计思路。 参考资源链接:[单片机火灾报警系统设计:智能监控与应急响应](https://wenku.youkuaiyun.com/doc/45hqy8iesj?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二价亚铁.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值