MQ 消息中间件

IBM MQ

保证一条消息一定送到、且只送一次,哪怕中途系统崩溃。

存储与数据出现时间 · 1993 年前后商业授权,按容量或处理器计费。消息队列中间件可靠投递金融级
看官方文档

01 它是干嘛的

MQ 是企业级消息中间件,负责在两个系统之间可靠地搬运消息。它的价值不在「快」,而在「绝不丢」:消息写入磁盘、支持事务、确认后才删除,即使接收方宕机也能在恢复后继续投递。

02 为什么会有它

以前:两个系统直接调用,一方挂了另一方就懵了

早期系统对接多采用直接调用:A 系统调用 B 系统的接口,等待返回。问题在于 B 一宕机,A 的请求就失败;B 恢复了,那些失败的请求也没人再重试,除非 A 自己记录了它们。

更麻烦的是峰值。A 突然涌入十倍流量,B 处理不过来直接被压垮,故障沿调用链扩散,这就是常说的雪崩。

消息队列的思路是在中间放一个可靠的缓冲区:A 把消息交给队列就算完成,队列负责持久化并保证送达;B 按自己的节奏来取。两边解耦,峰值被削平,故障不再直接传导。

03 它怎么工作

消息先持久化落盘,消费者取走并明确确认后才会被删除;未确认的消息会重新投递。

消息队列:解耦、削峰、异步、重试① 突发流量先排进去② 空闲才取走处理失败人工介入生产者下单服务队列先把请求堆起来(削峰)消费者 1按自己节奏处理消费者 2忙就加人一起消费死信队列重试多次仍失败的自动重试失败不是立刻丢掉生产者只管把消息丢进去,不用管谁处理、处理多慢。两边从此互不拖累。正常重试需要人看
看队列中间那个「缓冲区」:它吸收了上下游的速度差,也切断了故障的直接传导路径。

一条消息的不丢之旅

  1. 1
    ① 生产者发送

    发送方把消息写入队列,队列落盘后返回确认,发送方才算成功。

  2. 2
    ② 持久化

    消息写入持久化存储并记日志,进程崩溃也不丢失。

  3. 3
    ③ 消费者拉取

    接收方按自身处理能力取消息,处理速度与发送速度解耦。

  4. 4
    ④ 确认与删除

    处理成功后显式确认,队列才删除;未确认则会重新投递。

  5. 5
    ⑤ 重试与死信

    反复失败的消息进入死信队列,避免堵塞正常消息,同时保留现场供排查。

04 谁在用它

银行与支付清算

一笔交易指令绝不能丢也不能重复执行。

跨系统异构集成

老系统与新系统通过消息解耦对接。

削峰填谷

大促时先把请求堆在队列里,后端按能力消费。

需要严格顺序的场景

同一账户的操作必须按序处理。

05 怎么用

关键是设计好「确认时机」与「重复消费如何处理」。

  1. 01明确消息是否必须严格有序,有序会显著限制并发。
  2. 02决定确认时机:处理前确认可能丢,处理后确认可能重复。
  3. 03让消费逻辑幂等,重复处理不会造成错误结果。
  4. 04配置死信队列并定期查看,那是故障的第一现场。

避坑提示

  • !幂等是消息系统的生命线,靠它兜住「至少一次投递」带来的重复。
  • !队列堆积是预警信号,说明消费能力已经跟不上。

06 关键概念

解耦
发送方与接收方不直接依赖,一方故障不立刻拖垮另一方。
削峰
用队列吸收突发流量,后端按自身节奏消费。
幂等
同一条消息处理多次结果一致,是重复投递的必要防线。
死信队列
存放反复处理失败的消息,避免拖住整个队列。

07 容易混淆的对比

Kafka吞吐极高、偏向日志流与回放,但单条消息的可靠确认语义不如 MQ 严格。
RabbitMQ轻量灵活、路由能力强,适合互联网业务;金融级持久化与事务支持弱于 MQ。
图软件图鉴

纯静态站点,无后端、无追踪。内容为中文原创撰写,用于帮助非技术读者理解主流软件产品。

关于本站

全部内容在构建时生成
产品名称与商标归各自公司所有

© 2026 软件图鉴Nuxt 4 · Vue 3 · Tailwind 4 · 纯静态