【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.mzph.cn/bicheng/78156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes》》k8s》》Heml

Heml 下载地址 安装 curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash# helm 添加 仓库 # helm repo add 仓库名称 仓库地址 helm repo add stable http://mirror.azure.cn/kubernetes/charts/# 查看helm 仓库列表 helm repo list # 结…

【专题刷题】二分查找(一):深度解刨二分思想和二分模板

📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;&#xff…

乡村治理数字化平台:信息技术赋能乡村振兴的深度探索

在信息化技术飞速发展的背景下,数字化转型已成为推动社会进步和治理现代化的关键力量。乡村治理数字化平台,作为信息技术在乡村治理领域的深度应用,正逐步成为提升乡村治理效能、推动乡村振兴的重要工具。本文将深入探讨乡村治理数字化平台的…

PyQt6基础_QTabWidget

目录 代码 运行 官方文档 PySide6.QtWidgets.QTabWidget - Qt for Python 代码 class TempWidget(QWidget):def __init__(self):super().__init__()self.tabs QTabWidget()self.tabs.tabBarClicked.connect(self.tabs_tabBarClicked)widget_tab1 QWidget()widget_tab2…

springboot在eclipse里面运行 run as 是Java Application还是 Maven

在 Eclipse 里运行 Spring Boot 项目时,既可以选择以“Java Application”方式运行,也可以通过 Maven 命令来运行,下面为你详细介绍这两种方式及适用场景。 以“Java Application”方式运行 操作步骤 在项目中找到带有 SpringBootApplicat…

怎样记忆Precision、Recall?

首先,明确符号: TP(True Posive):标签为正,预测为正 TN(True Negative):标签为负,预测为负 FP(False Positive):标签为负,预测为正 FN(False Negative):标签为正&#xf…

【C语言】C语言动态内存管理

前言 在C语言编程中,内存管理一直是程序员需要重点关注的领域。动态内存管理更是如此,它不仅涉及到内存的灵活分配和释放,还隐藏着许多潜在的陷阱。本文将从动态内存分配的基础讲起,逐步深入到常见的错误、经典笔试题分析&#x…

expres路由模块化

Express 路由模块化是实际开发中非常重要的一部分,可以让你的项目结构更清晰、维护更方便。 🧱 一、为什么要模块化? 随着项目变大,如果所有路由都写在 app.js 中,会很乱。使用模块化后可以: 功能解耦&a…

C语言——填充矩阵

C语言——填充矩阵 一、问题描述二、格式要求1.输入形式2.输出形式3.样例 三、实验代码 一、问题描述 编程实现自动填充nn矩阵元素数值,填充规则为:从第一行最后一列矩阵元素开始按逆时针方向螺旋式填充数值1,2,…,nn…

零基础上手Python数据分析 (22)案例实战]之利用 Matplotlib Seaborn 进行电商销售数据可视化分析

写在前面 —— 图表为刃,洞察先行!综合运用 Pandas、Matplotlib 与 Seaborn,点亮数据价值 本篇通过一个完整的案例实战,体验如何将数据分析与数据可视化紧密结合,让冰冷的数据转化为生动、直观、富有洞察力的视觉故事! 案例目标: 本篇博客将延续我们在第 17 篇案例中…

Java开发经验总结

只要删繁、捋清脉络,才能掌握本质!只有创新才有价值,保持创新、保持学习! 计划:UNIAPPSPRINGBOOT学习、SPRINGBOOTVUE新版学习、页面展示学习、PYTHON。 ***********************************************************…

深入解析:RocketMQ、RabbitMQ和Kafka的区别与使用场景

互联网大厂Java求职者面试:RocketMQ、RabbitMQ和Kafka的深入解析 故事场景:严肃且专业的面试官与架构师程序员马架构 在一家知名的互联网大厂,Java求职者正在接受一场严格的面试。面试官是一位经验丰富的技术专家,他将通过多轮提…

使用vue2开发一个医疗预约挂号平台-前端静态网站项目练习

对于后端开发的我,最近一直在学习前端开发,除了要学习一些前端的基础知识外,肯定少不了一些前端项目练习,就通过前端的编程知识 就简单做一个医疗预约挂号前端静态页面。这个网站主要是使用了vue2 的相关技术实现的。 主要实现了这…

MongoDB(docker版)备份还原

docker启动MongoDB docker run -d -p 27017:27017 --name my-mongo -v /mongodb/db:/data/db mongo备份MongoDB 使用mongodump备份数据库时,默认会将备份数据保存在当前工作目录下的dump文件夹中。 docker容器中默认备份在当前工作目录,所以此处指定当…

zkPass案例实战之合约篇

目录 一、contracts/contracts/ProofVerifier.sol 1. License 和 Solidity 版本 2. 导入依赖 3. 合约声明和默认分配器地址 4. 验证证明 5. 验证分配器签名 6. 验证验证者签名 7. 签名前缀处理 8. 签名恢复 总结 二、contracts/contracts/SampleAttestation.sol 1. …

ElasticSearch:高并发场景下如何保证读写一致性?

在Elasticsearch高并发场景下,可以通过以下多种方式来保证读写一致性: 等待主分片和副本分片都确认(类似半同步机制) 设置consistency参数:在写操作时,可以设置consistency参数来控制写操作的一致性级别。…

8、constexpr if、inline、类模版参数推导、lambda的this捕获、初始化列表、namespace---c++17

一、constexpr if:编译时条件分支 作用:在模板编程中,根据条件在编译时选择不同的代码路径,无需特化版本或复杂SFINAE技巧[替代SFINAE]。[SFINAE将在模版元编程再讲。下个月了。] 注意:默认使用了隐式inline 基本语法…

【Java设计模式及实践学习-第4章节-结构型模式】

第4章节-结构型模式 笔记记录 1. 适配器模式2. 代理模式3. 装饰器模式4. 桥接模式5. 组合模式6. 外观模式7. 享元模式8. 总结 1. 适配器模式 2. 代理模式 3. 装饰器模式 4. 桥接模式 5. 组合模式 6. 外观模式 7. 享元模式 Java语言中的String字符串就使用了享元模式&…

unity基础自学2.3:移动和抓握物品

文章目录 前言:1、基础配置①XR Interaction Toolkit②创建一个XR场景③示例文件实现④ 一键配置(PICO Building Blocks) 2、射线移动物品和抓握物品方法一:Grab Interactable方法二:prefab 3、Box Collider的作用与使…

pytest基础-new

规范 1、首先创建 py 文件命名以 test_ 开始或者以 _test 结尾 2、若是新建类,测试类需要以 Test_开头 3、测试用例(方法)需要以 test_开头 assert 断言 assert xx:判断 xx 为真 assert not xx:判断 xx 不为真 asse…