消息队列 MQ

一、什么是MQ

二、RabbitMQ消息队列

  1. 概念

    • channel:操作MQ的工具
    • exchange:路由消息到队列中
    • queue:缓存消息
    • virtual host:虚拟主机,是对exchange、queue等资源的逻辑分组
  2. SpringAMQP

    <!--AMQP依赖,包含RabbitMQ-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    1. Basic Queue 简单队列模型
    2. Work Queue 工作队列模型

      当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。此时就可以使用 work 模型,多个消费者共同处理消息处理,速度就能大大提高了。
    3. 发布、订阅模型-Fanout

      在广播模式下,消息发送流程是这样的:
      • 可以有多个队列
      • 每个队列都要绑定到 Exchange(交换机)
      • 生产者发送的消息,只能发送到交换机,交换机来决定要发给哪个队列,生产者无法决定
      • 交换机把消息发送给绑定过的所有队列
      • 订阅队列的消费者都能拿到消息
    4. 发布、订阅模型-Direct

      在 Direct 模型下:

      • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
      • 消息的发送方向 Exchange发送消息时,也必须指定消息的 RoutingKey
      • Exchange 不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey 与消息的 Routing key完全一致,才会接收到消息
    5. 发布、订阅模型-Topic

       

      Topic 与 Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic 类型可以让队列在绑定Routing key 的时候使用通配符

      • queue1:绑定的是 china.# ,因此凡是以 china. 开头的 routing key 都会被匹配到。包括 china.news 和 china.weather
      • queue2:绑定的是 #.news ,因此凡是以 .news 结尾的 routing key 都会被匹配。包括 china.news 和 japan.news
posted @ 2022-03-18 14:33  美少女战士就是我  阅读(64)  评论(0)    收藏  举报