RabbitMQ 使用视频教程

338 阅读2分钟

环境

示例工程基于 springboot 2.2.6.RELEASEspring-boot-starter-amqp

视频

RabbitMQ 简化概念

学习使用新工具组件的使用,不能一开始就太深入、太复杂,门槛太高不利于学习入门,应该先摒弃一些暂不影响使用或和上层应用无关的知识点,降低坡度,上手之后再慢慢深入去学习。

RabbitMQ

RabbitMQ 简单示意图
  • Message 消息
    消息包含内容和 Routing key、以及其他属性,消息发送者需要指定Routing key

  • Exchange 交换机
    消息发送者总是把消息发往交换机,根据 Exchange 类型 和 Binding key 将消息投递到 Queue,最后抵达接收者。

    如果未显式指定 Exchange ,则会发送到 default exchangedefault exchange 会将消息投递到与 routing key 同名的 Queue

    Exchange 常用类型:

    • direct
      完全匹配。消息中的 Routing keyBinding 的 key 一致,才会匹配转发给 Queue

    • topic
      模式匹配。和 direct 类似,但 topic 支持通配符匹配: * 表示一个单词,# 表示任意多个单词。
      如:*.system 可以匹配 user.systemmenu.system

    • fanout
      广播模式。所有消息都会被投递到绑定了该 ExchangeQueue,和 Routing key 无关。

  • Queue 队列
    消息接收者从 Queue 获取消息。同一个 Queue 的接收者共同消费队列消息,即一条消息只会被其中一个接收者消费。

  • Binding 绑定ExchangeQueue 绑定起来,根据不同的 Exchange 类型,消息会被投递到不同的 Queue,一条消息可以被投递到多个 Queue 中。

单服务单节点接收

单服务单节点接收

单服务单节点接收

只需要让服务的多个节点监听同一个 Queue ,即可实现每条消息只被其中一个节点接收。

多服务单节点接收

多服务单节点接收

多服务单节点接收

每个服务集群各自监听一个 Queue,两个 Queue 用同样的 key 绑定到 Exchange ,这样每条消息都会被投递到两个 Queue,最终被节点接收。

广播

广播

广播

每个节点独立监听一个QueueExchange 类型为 fanout,每条消息都会被投递到所有 Queue 达到广播的效果。实际可以采用匿名、自动删除的 Queue 来实现。

docker 安装RabbitMQ

docker 可以快速搭建学习需要的各类环境,无须处理复杂的环境问题,开箱即用,是学习中间件的必备工具。docker 环境下,可以通过以下命令快速安装 RabbitMQ

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

其中 5672 是 rabbitMQ 的服务端口,15672 是 web 管理端口,可以通过浏览器访问,默认用户名/密码: guest/guest


示例中完整的源码: mq-learning