Salmon的全栈知识 Salmon的全栈知识
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 基础

    • 初识MQ
    • RabbitMQ
      • 1. 安装
      • 2. 收发消息
        • 2.1 交换机
        • 2.2 队列
        • 2.3 绑定关系
        • 2.4 发送消息
      • 3. 数据隔离
        • 3.1 用户管理
        • 3.2 virtual host
    • SpringAMQP
    • 业务改造
    • 练习
  • 高级

    • 发送者的可靠性
    • MQ的可靠性
    • 消费者的可靠性
    • 延迟消息
    • 实践
  • 《RabbitMQ》笔记
  • 基础
Salmon
2024-04-26
目录

RabbitMQ

RabbitMQ 是基于 Erlang 语言开发的开源消息通信中间件,官网地址:Messaging that just works — RabbitMQ (opens new window)

接下来,我们就学习它的基本概念和基础用法。

# 1. 安装

我们基于Docker来安装RabbitMQ,使用下面的命令即可:

docker run \
 -e RABBITMQ_DEFAULT_USER=itheima \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 --network hmall \
 -d \
 rabbitmq:3.8-management

如果拉取镜像困难的话,可以使用课前资料给大家准备的镜像,利用docker load命令加载: image-20240426220124994

可以看到在安装命令中有两个映射的端口:

  • 15672:RabbitMQ提供的管理控制台的端口
  • 5672:RabbitMQ的消息发送处理接口

安装完成后,我们访问 http://192.168.150.101:15672 (opens new window) 即可看到管理控制台。首次访问需要登录,默认的用户名和密码在配置文件中已经指定了。

登录后即可看到管理控制台总览页面: image-20240426220134487

RabbitMQ对应的架构如图: image-20240426220141991 其中包含几个概念:

  • publisher:生产者,也就是发送消息的一方
  • consumer:消费者,也就是消费消息的一方
  • queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理
  • exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
  • virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

上述这些东西都可以在RabbitMQ的管理控制台来管理,下一节我们就一起来学习控制台的使用。

# 2. 收发消息

# 2.1 交换机

我们打开Exchanges选项卡,可以看到已经存在很多交换机: image-20240426220255844 我们点击任意交换机,即可进入交换机详情页面。仍然会利用控制台中的publish message 发送一条消息: image-20240426220302098 image-20240426220309151 这里是由控制台模拟了生产者发送的消息。由于没有消费者存在,最终消息丢失了,这样说明交换机没有存储消息的能力。

# 2.2 队列

我们打开Queues选项卡,新建一个队列: image-20240426220314662 命名为hello.queue1: image-20240426220319869 再以相同的方式,创建一个队列,密码为hello.queue2,最终队列列表如下: image-20240426220325075 此时,我们再次向amq.fanout交换机发送一条消息。会发现消息依然没有到达队列!!

怎么回事呢?

发送到交换机的消息,只会路由到与其绑定的队列,因此仅仅创建队列是不够的,我们还需要将其与交换机绑定。

# 2.3 绑定关系

点击Exchanges选项卡,点击amq.fanout交换机,进入交换机详情页,然后点击Bindings菜单,在表单中填写要绑定的队列名称: image-20240426220331923 相同的方式,将hello.queue2也绑定到改交换机。

最终,绑定结果如下: image-20240426220348022

# 2.4 发送消息

再次回到exchange页面,找到刚刚绑定的amq.fanout,点击进入详情页,再次发送一条消息: image-20240426220355685 回到Queues页面,可以发现hello.queue中已经有一条消息了: image-20240426220403575 点击队列名称,进入详情页,查看队列详情,这次我们点击get message: image-20240426220408685 可以看到消息到达队列了: image-20240426220413588 这个时候如果有消费者监听了MQ的hello.queue1或hello.queue2队列,自然就能接收到消息了。

# 3. 数据隔离

# 3.1 用户管理

点击Admin选项卡,首先会看到RabbitMQ控制台的用户管理界面: image-20240426220422742 这里的用户都是RabbitMQ的管理或运维人员。目前只有安装RabbitMQ时添加的itheima这个用户。仔细观察用户表格中的字段,如下:

  • Name:itheima,也就是用户名
  • Tags:administrator,说明itheima用户是超级管理员,拥有所有权限
  • Can access virtual host: /,可以访问的virtual host,这里的/是默认的virtual host

对于小型企业而言,出于成本考虑,我们通常只会搭建一套MQ集群,公司内的多个不同项目同时使用。这个时候为了避免互相干扰, 我们会利用virtual host的隔离特性,将不同项目隔离。一般会做两件事情:

  • 给每个项目创建独立的运维账号,将管理权限分离。
  • 给每个项目创建不同的virtual host,将每个项目的数据隔离。

比如,我们给黑马商城创建一个新的用户,命名为hmall: image-20240426220454932 你会发现此时hmall用户没有任何virtual host的访问权限: image-20240426220500498 别急,接下来我们就来授权。

# 3.2 virtual host

我们先退出登录: image-20240426220516529 切换到刚刚创建的hmall用户登录,然后点击Virtual Hosts菜单,进入virtual host管理页: image-20240426220521137 可以看到目前只有一个默认的virtual host,名字为 /。

我们可以给黑马商城项目创建一个单独的virtual host,而不是使用默认的/。 image-20240426220525488 创建完成后如图: image-20240426220539604 由于我们是登录hmall账户后创建的virtual host,因此回到users菜单,你会发现当前用户已经具备了对/hmall这个virtual host的访问权限了: image-20240426220545891

此时,点击页面右上角的virtual host下拉菜单,切换virtual host为 /hmall: image-20240426220550748 然后再次查看queues选项卡,会发现之前的队列已经看不到了: image-20240426220555762 这就是基于virtual host的隔离效果。

上次更新: 2025/07/23, 01:37:33
初识MQ
SpringAMQP

← 初识MQ SpringAMQP→

Theme by Vdoing | Copyright © 2022-2025 Salmon's Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式