当前位置: 首页 > ops >正文

02_MQ常见问题

文章目录

  • 消息队列(MQ)常见问题解析
    • 1. 什么是消息队列?
    • 2. 为什么使用消息队列?
    • 3. 消息队列的使用场景
    • 4. 常见消息队列系统
    • 5. RabbitMQ核心概念
    • 6. 如何保证消息可靠性
      • 生产者保证消息不丢失
      • 消息队列保证消息不丢失
      • 消费者保证消息不丢失
    • 7. 如何处理消息积压
    • 8. 如何保证消息顺序性
    • 9. 如何处理消息重复消费
    • 10. 消息队列高可用实现

消息队列(MQ)常见问题解析

1. 什么是消息队列?

消息队列(MQ)是一种应用程序对应用程序的通信方法,允许独立的应用程序通过读写出入队列的消息来进行通信,而不需要彼此直接交互。它由生产者(Producer)、代理(Broker)、消费者(Consumer)三者组成,采用生产者-消费者模型。

2. 为什么使用消息队列?

主要优点包括:

  • 解耦:生产者和消费者可以独立运行,无需直接相互依赖
  • 异步通信:生产者可以立即发送消息,消费者可以在方便时处理
  • 流量削峰:控制系统的流量,防止系统过载
  • 消息持久化:防止系统崩溃时丢失数据
  • 顺序保证:保证消息按照发送顺序被处理

3. 消息队列的使用场景

  • 应用解耦:将相关但耦合度不高的系统联系起来
  • 流量削峰:处理大流量入口的业务,如秒杀系统
  • 异步处理:减少响应时间,如注册发送验证码、下单通知等
  • 消息通讯:实现点对点消息队列、聊天室等
  • 远程调用

4. 常见消息队列系统

  • RabbitMQ:基于AMQP协议,适合中小型公司、低吞吐量场景
  • Kafka:高吞吐量,适合大数据场景
  • RocketMQ:阿里巴巴开源,适合大型公司
  • ActiveMQ:较早期的消息队列系统

5. RabbitMQ核心概念

  • Broker:一个或多个erlang node的逻辑分组
  • Cluster:在broker基础上,增加node间共享元数据的约束
  • Channel:实际进行路由工作的实体,负责按照routing_key投递消息
  • Exchange:保存binding关系的查找表
  • Queue:具有自己的erlang进程
  • vhost:虚拟broker,拥有独立的权限系统

6. 如何保证消息可靠性

生产者保证消息不丢失

  • 事务机制:吞吐量下降,不推荐
  • Confirm模式:异步确认消息是否到达队列

消息队列保证消息不丢失

  • 持久化存储:将queue的durable设置为true
  • ACK机制:消息持久化至磁盘后再发送ack

消费者保证消息不丢失

  • 手动ACK:消费者处理完消息后手动确认
  • 重试机制:连接中断时重新分发消息

7. 如何处理消息积压

  • 增加消费者数量
  • 优化消费者处理逻辑
  • 设置合理的队列长度,超过时抛弃请求或跳转错误页面

8. 如何保证消息顺序性

  • 单队列单消费者模式
  • 消息分组机制
  • 在消费者端实现顺序处理逻辑

9. 如何处理消息重复消费

  • 实现幂等性处理
  • 使用唯一ID去重
  • 业务逻辑上处理重复消息

10. 消息队列高可用实现

  • 集群部署
  • 镜像队列
  • 多副本机制
http://www.xdnf.cn/news/9260.html

相关文章:

  • 科研课题验收测试报告:用途与类型深度解析~
  • DFS入门刷题c++
  • 工业级UART数据转发芯片EU104 低功耗多串口芯片 1主4从多串口转发
  • 26、请求处理-【源码分析】-Rest映射及源码解析
  • 机器学习知识体系:从“找规律”到“做决策”的全过程解析
  • 走进黑盒:SQL 是如何在数据库中执行的?
  • Linux基础命令掌握-cut命令
  • 0527漏洞原理:SQL注入笔记
  • CSRF和XSS攻击防御指南
  • 院校机试刷题第十三天:代码随想录算法训练营第七天
  • 调不好分布式锁?HarmonyOS + Redis 分布式锁失效排查全路径
  • Oracle20200714GI_PSU补丁流程及问题收集
  • 一种比较精简的协议
  • python学习day30
  • SSTable(Sorted String Table)结构与用途详解
  • 数据类型(基本类型)day2
  • C-内存函数,动态内存
  • Qt布局连续添加控件
  • Web3怎么本地测试连接以太坊?
  • 封装文档核心知识点总结(通俗版)
  • 利用 MkDocs 和 GitHub 部署个人博客网页
  • LINUX安装运行jeelowcode后端项目(命令行)
  • 【运维自动化-标准运维】如何实现在不同步骤间传递参数
  • 人该怎样活着呢?54
  • 随机模拟专题:第一课
  • 5G网络切片技术:开启网络服务定制化新时代
  • SpringMVC注解、@Controller注解和@RestController注解的区别、@RequestMapper、@PathVariable
  • 制作一款打飞机游戏59:子弹生成
  • DeepSeek 赋能智能安防:从算法革新到场景落地的全解析
  • 4月报 | SeaTunnel支持TDengine的多表Sink功能