RabbitMQ使用手册

本文最后更新于:2021年6月21日 上午

通过Docker 安装

docker pull rabbitmq:management

docker run -d --name rabbit -v /mydata/rabbitmq:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61313:61313 -p 1883:1883 rabbitmq:management

docker update rabbit --restart=always

image-20210608124300501

虚拟主机可以类比MySQL的库

工作模式

(1)直连模式

  • 一个生产者生成消息,一个消费者消费消息,中间的消息队列进行消息的缓存和传递
  • 适用于点对点的场景,比如用户登录成功后,增加积分。

(2)工作队列 Work Queue

当消息处理比较耗时的时候,可能生产消息的速度会远远大于消费的速度。长此以往,形成消息堆积。

此时,可以使多个消费者绑定到队列中,共同消费队列中的消息。队列中的消息一旦消费,就会消失,避免消息的重复消费。

  • 默认是轮询,消费者1一个消息,消费者2一个消息,消费者1再一个消息
  • 为了避免因消费者突然宕机而丢失消息,需关闭自动确认机制。在真正消费完时,再手动确认。

(3)广播模式 fanout

img

  • 基本流程

    • 每个消费者都有自己的临时队列queue
    • 每个队列必须绑定到交换机Exchange
    • 生产者发送消息时,只能先发送到交换机,由交换机来决定发送到哪个队列中。
    • 队列的消费者都能拿到消息 —> 一条消息被多个消费者消费

    比如订单系统和库存系统均为消费者,当用户已提交订单的消息通过广播传送给每个消费者时,每个消费者做出自己的响应。

(4)路由模型 Routing

fanout模型下,生产者发布消息时,交换机将消息转发给所有消费者;而路由模型下,交换机选择性地将消息转发给消费者

类型 示意图 解释
Routing 下的direct img (1)临时队列与交换机通过RoutingKey进行绑定;
(2)生产者向交换机发送消息时,也必须指定RoutingKey
(3)只有两个key一致时,交换机才会将消息转发给相应的消费者
Routing下的topic img 相比于direct中固定的key,topic支持表达式类型的key,实现了动态路由

SpringBoot下,关闭自动确认。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!