当前位置: 首页 > news >正文

【RabbitMQ | 第2篇】RabbitMQ 控制台实现消息路由 + 数据隔离

文章目录

  • 同步调用和异步调用
  • MQ
  • RabbitMQ
    • 1. RabbitMQ控制台实现交换机路由到队列
      • 1.1 创建队列
      • 1.2 将消息发送给交换机,是否会到达队列
    • 2. RabbitMQ控制台实现数据隔离
      • 2.1 添加一个用户
      • 2.2 创建新的虚拟主机

在这里插入图片描述

同步调用和异步调用

同步调用是指完成一个功能,其内部有多个任务,要一直等待这几个任务全都完成后,才算这个功能的结束。

e.g 比如,在登录的时候,原本只需要校验用户名和密码,但需求说的是,还需要给用户发一条短信,或者还需要给用户加积分之类的。如果是同步的话,那么用户登录就不仅仅是校验用户名和密码,还要一直等待成功发送短信或加完积分后,才能进入网页。
这样,用户等待时间较长,性能就比较差。

异步调用是指只完成必要的任务,其余任务交给消息代理,由消息代理去慢慢通知消息处理方处理,用户就不需要一直等待,把任务通知给消息代理即可。
优点:性能较好,无需等待;缓存消息,流量削峰填谷。
缺点:不能立即调用结果;不确定后序任务时候执行成功;依赖于消息代理的可靠性。

在这里插入图片描述

MQ

MQ(MessageQuque):消息队列,存放消息的一种队列。
常见:RabbitMQ、RocketMQ、Kafka、ActiveMQ。

RabbitMQRocketMQKafkaActiveMQ
公司Rabbit阿里ApacheApache
开发语言ErlangJavaScala&JavaJava
协议支持AMQP, XMPP, SMTP, STOMP自定义协议自定义协议OpenWrite, STOMP, REST, XMPP, AMQP
可用性一般
单机吞吐量(QPS)一般非常高
消息延迟微妙级毫秒级毫秒以内毫秒级
消息可靠性一般一般

RabbitMQ 的延迟性最好(微秒级),Kafka 的吞吐量最高(百万级别的 QPS)。

RabbitMQ

publisher(消息发送者)、exchange(交换机)、queue(队列)、consumer(消息消费者)、virtual-host(虚拟主机)
在这里插入图片描述
消息模型:
消息发送者将消息发送给交换机,交换机路由到队列,消费者监听队列。

为什么有 virtual-host 的存在 ?
一个公司中不同项目使用同一套 MQ 的服务,那这样不同项目的交换机和队列就可能会有冲突。所以就像数据库一样,每个项目有自己的 virtual-host,不同的 virtal-host 有不同的交换机和队列,那么不同的 virtual-host 内的队列和交换机就不会产生影响。 —— 数据隔离作用

1. RabbitMQ控制台实现交换机路由到队列

1.1 创建队列

在这里插入图片描述

1.2 将消息发送给交换机,是否会到达队列

在这里插入图片描述
交换机绑定队列:
在这里插入图片描述
绑定后,点击绑定的队列,可以看到:
在这里插入图片描述
模拟交换机接受消息和路由消息:
在这里插入图片描述
发送后,交换机显示:
在这里插入图片描述
发送后,队列 hello.que1 中:
在这里插入图片描述

交换机负责路由和转发消息,本身不具备存储消息的能力。

2. RabbitMQ控制台实现数据隔离

2.1 添加一个用户

在这里插入图片描述
可以看到,此时新增的用户是没有虚拟主机的:
在这里插入图片描述
点击退出登录后,使用刚刚新创建的用户登录:
在这里插入图片描述
此时没有虚拟主机,无法进行任何的操作的。

2.2 创建新的虚拟主机

在这里插入图片描述
查看当前用户的虚拟主机:
在这里插入图片描述
切换至刚刚创建的虚拟主机下,就不存在之前创建的队列了:
在这里插入图片描述
不同虚拟主机下的交换机:
在这里插入图片描述

一般,不同的项目就创建不同的虚拟主机,保证数据的隔离

http://www.xdnf.cn/news/50221.html

相关文章:

  • 本地化部署ASR服务程序:以FastASR为例
  • 使用 NEAT 进化智能体解决 Gymnasium 强化学习环境
  • 通过 WebSocket 接收和播放 WSS 协议视频流
  • Transformers是一种基于自注意力机制的神经网络模型
  • 王博:影视领域的多元创作先锋,以卓越才华开启新篇章
  • Java——类和对象
  • Nacos深度剖析与实践应用之-配置中心
  • RenderStage::drawInner
  • Vue如何实现样式隔离
  • 【Python笔记 01】变量、标识符
  • C++每周一篇
  • 零点、驻点、拐点、极值点、最值点的定义、几何意义、求解方法
  • MACOS 中聚焦使用技巧
  • 云效部署实现Java项目自动化部署图解
  • 基于SpringBoot+Vue实现的旅游景点预约平台功能一
  • Dijkstra 算法入门笔记 (适用于算法竞赛初学者) - C++ 代码版
  • 与cozi人工智能类似的产品有哪些以及它们的优缺点
  • P8512 [Ynoi Easy Round 2021] TEST_152 Solution
  • Java基础语法
  • 坐标轴刻度QCPAxisTicker
  • Web3.0热门领域NFT项目实战课程
  • 使用virtualbox的HostOnly建立共享网络-实现虚拟机上网
  • Function calling LLMs 的 MCP:AI开发的双剑合璧
  • 访问”和“初始化本质区别以及C++静态成员变量定义位置详解
  • 【Rust 精进之路之第9篇-所有权·核心】规则与移动 (Move):Rust 内存安全基石详解
  • Go语言中的sync.Map与并发安全数据结构完全指南
  • Linux:文件系统
  • 【C++基本算法】背包问题——完全背包
  • javaSE.二叉树的遍历
  • 8.QT-按钮类控件|Push Button|Radio Button|Check Box|Tool Button(C++)