MQ 杂记

警告
本文最后更新于 2022-02-08,文中内容可能已过时。

MQ 四大作用

  1. 异步通信:减少线程等待

    1. 进入MQ之前的操作都是轻量级的内存计算,进入MQ之后的操作是重量级的验证交易、金额操作等。
  2. 系统解耦

  3. 削峰填谷:压力大的时候,缓冲部分请求

  4. 可靠通信:提供多种消息模式、服务质量、顺序保障等

  5. 事件驱动:在每一个步骤结束之后发送事件,不同的步骤会发送一个或者多个事件。然后消费者消费了消息之后,就开始执行下一个步骤。优势是低耦合、高扩展、高可用。

订单超时取消问题

  • 设置一个有超时时间的延时队列
    • 通过 exchange,来控制消息什么时候被真的投递到队列里,之前是否定Mnesia(基于文件的数据库)里面。
  • 防止在过期的时刻前后两头消费,防止并发操作
    • 分布式锁
    • 乐观锁
    • SELECT FOR UPDATE

消息处理模式

  1. 点对点:Queue
  2. 发布订阅:对应 Topic(Kafka)

Kafka

  1. Broker:集群中的服务器
  2. Topic:消息类别,物理上不同 Topic 的消息分开存储【通过顺序写入达到高吞吐】
  3. Partition:每个 Topic 包含 1~n 个 Partition【可扩展性】
  4. Producer:生产者,负责发布消息到 Broker,有三种确认模式
    1. ack = 0 只发送,不管是否成功写入 broker
    2. ack = 1 写入到 leader 就认为成功
    3. ack = -1/all 写入到最小副本则认为成功
  5. Consumer: 消费者,从 Broker 读取消息
  6. Consumer Group:每个 Consumer 属于一个特定的 Consumer Group

RabbitMQ

安装

1
2
3
docker pull rabbitmq:management # 自带控制台
docker run -itd --name rabbitmq-test -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS = admin -p 15672:15672 -p 5672:5672 rabbitmq:management
docker exec -it rabbitmq-test /bin/bash

26.2 RocketMQ

26.3 Pulsar

0%