199、在RabbitMQ管理控制台中管理 Exchange(充当消息交换机的组件) 和 Queue(消息队列),以及对默认Exchange的讲解

news2025/3/1 9:49:53

目录

  • ★ 自动创建的Exchange
  • ★ 创建Exchange所支持的属性
  • 演示:
      • 创建消息队列
  • ★ 持久化消息
  • ★ 默认Exchange讲解

在这里插入图片描述

使用默认的 Exchange 支持 P2P:
Exchange:把客户端发来的消息路由到消息队列去
每个虚拟机下面都默认有 Exchange ,通过这个默认的exchange就可以很好的支持 P2P 的消息。
在这里插入图片描述
在这里插入图片描述
★ JMS vs AMQP

▲ 高级消息队列协议(Advanced Message Queuing Protocol、简称AMQP)是一种

平台无关的、线路级(wire-level)的消息中间件协议。

▲ AMQP并不适于JMS范畴,AMQP与JMS的区别与联系:

- JMS定义消息中间件的规范,从而实现对消息操作的统一;AMQP则通过制订协议来统一数据交互的格式。

- JMS限定了必须使用Java语言;AMQP只制订协议,不规定实现语言和实现方式,因此是跨语言的。

- JMS只制订了两种消息模型;而AMQP的消息模型更加灵活。

RabbitMQ就是典型的AMQP产品,它是用Erlang语言来开发。从灵活性的角度来看,RabbitMQ比ActiveMQ更优秀;

从性能上来看,RabbitMQ更是完胜ActiveMQ,因此目前很多公司都会优先选择RabbitMQ作为消息队列。

★ 自动创建的Exchange

RabbitMQ自动为每个虚拟主机自动创建7个Exchange

direct 类型的Exchange两个
fanout 类型的Exchange一个、这种类型的Exchange用于模拟JMS的Pub-Sub消息模型。
headers 类型的Exchange两个
topic 类型的Exchange两个。

在这里插入图片描述

★ 创建Exchange所支持的属性

Virtual Host: 选择在哪个虚拟主机(相当于命名空间)下创建Exchange。

Name: 指定Exchange的名称。

Type: 指定Exchange的类型,支持fanout、direct、headers、topic这些类型。

Durability: 指定该Exchange是否需要持久化保存 。

Auto delete: 指定该Exchange是否会自动删除;如果启用“自动删除”,那意味着只要该Exchange不再使用(没有消费者向它发送消息、没有Queue与它绑定),它就会自动删除。

Internal: 指定是否创建内部Exchange。如果指定为true,则客户端将不能直接向该Exchange发布消息,它只能用于与其他Exchange绑定、接受其他Exchange分发过来的消息。(Exchange可以将消息再次分发给Exchange)。

Arguments: 指定额外的创建参数。

Exchange 不仅可以把消息分发给 Queue 消息队列,
Exchange还可以将消息再次分发给Exchange,只不过ExchangeA分发给ExchangeB后,最后ExchangeB还是得把消息分发给 queue 消息队列。

控制台创建 Exchange
在这里插入图片描述
在这里插入图片描述

演示:

创建消息队列

创建4个消息队列
在这里插入图片描述

在这里插入图片描述

然后给test.direct 这个 Exchange 绑定 3个消息队列
在这里插入图片描述

在这里插入图片描述

然后给这个 exchange发送消息。
这里,还不清楚这里的消息是发送给exchange,还是exchange把消息路由发送给queue。
偏向后者。

没错,后面研究,发现虽然是在控制台的 Exchange 界面发送消息,但其实这个 Publish Message 发送消息的功能,就是把消息发送给 test.direct 这个Exchange。
在这里插入图片描述
注意:
我在纠结 Exchange 的 Publish message 发送消息这里,是把消息发在 exchange,还是 exchange把消息发送到queue。
后面研究:这里的控制台的Publish message 是把消息发送给 exchange

如图:成功发送消息路由key 是 testE-key-q1 。
提示消息已经发布成功了
在这里插入图片描述

然后这时候来看看消息队列是否有该消息。
因为如果路由key,对得上,那么这个 Q1 应该就得有消息。
在这里插入图片描述
点进Q1查看:

在这里插入图片描述

再创建一个Exchange,类型是 fanout,fanout:扇形,就是广播类型

在这里插入图片描述

给这个 exchange 绑定 Q1 和 Q4 这两个消息队列 queue
在这里插入图片描述
然后发送消息到 test.fanout 这个 exchange 进行测试:

在这里插入图片描述

查看消息队列queue
可以看出发送广播消息成功。
在这里插入图片描述

Exchange的绑定 和 Queue 的绑定
在这里插入图片描述

★ 持久化消息

▲ 持久化的Exchange能与持久化的队列结合使用,用于确保消息的持久化。
如果不使用持久化的消息,当RabbitMQ遇到服务器宕机等故障时,那些未处理的消息有可能会丢失;
使用持久化的消息则可确保消息不会丢失(无论遇到什么情况)。

▲ 使用持久化消息需要3个条件:

- 使用持久化的Exchange
- 使用持久化的队列
- 发送消息时设置使用持久化分发模式(将delivery Mode设为2), 

Queues 的 Get Message 讲解:
如图:这个 properties 的 delivery_model: 2 就表示这个消息是持久化消息。
在这里插入图片描述

在这里插入图片描述

★ 默认Exchange讲解

只要创建虚拟机,那么控制台就会为我们自动创建7个 Exchange,但是自动创建的 Exchange,并不代表就是默认的 Exchange。默认的Exchange只有一个。如图:
默认的Exchange是没有名字的,只是用括号表明这是个默认的Exchange。
在这里插入图片描述
点进去看有 D 和 I 的 Exchange
在这里插入图片描述

▲ 默认Exchange没有名字、类型是direct(type为direct),并且是持久化保存的Exchange(durable为true)。

▲ 默认Exchange会隐式(自动)绑定到每个Queue消息队列(以消息队列名作为绑定的路由key),而且不能执行显式绑定或解绑。
就是我们添加多少个消息队列,这个默认的 Exchange都是对这些消息队列进行绑定。
比如这里我们添加了Q1、Q2、Q3、Q4 这四个消息队列,那么这个默认的Exchange就会隐式的绑定这四个消息队列,绑定的各个路由key就是各消息队列的名字。

                   →(路由key为Q1)       Q1队列
                   →(路由key为Q2)       Q2队列
   默认Exchange 
                   →(路由key为Q3)       Q3队列
                   →(路由key为Q4)       Q4队列

由此可见:当你向默认Exchange发送任何消息时,该消息始终会被路由到与该消息的路由key同名的队列。

这意味着:
如果程序向默认Exchange发送路由key为abc的消息,该消息将被分发到名为abc的队列……
如果程序向默认Exchange发送路由key为xyz的消息,该消息将被分发到名为xyz的队列……

▲ 默认Exchange也不能被删除。

▲ RabbitMQ只要一个内置的默认Exchange即可支持JMS的P2P消息模型。
——因为程序要将消息发送到哪个队列,只要向默认的Exchange发送消息,且使用该队列的名称作为路由Key即可。

演示这句:RabbitMQ只要一个内置的默认Exchange即可支持JMS的P2P消息模型
这个控制台的exchange的 publish message,这里是将消息发送到默认的Exchange。
路由key 是 Q1。提示消息发送成功
在这里插入图片描述

查看消息队列:
Q1原本只有之前测试的一条消息,现在变成2条,说明默认的Exchange能成功的分发消息。
在这里插入图片描述

如图:
test.direct 这个 exchange 通过 路由key (testE-key-q1) 发送了一条消息给 Q1 这个消息队列。
默认的Exchange发送消息给 Q1 队列,路由 key 就是 Q1 消息队列的名字。
这里的发送消息,是先发送给这个默认的Exchange的,然后再由这个默认的Exchange自己根据路由去分发消息
在这里插入图片描述

点进这个默认的Exchange 看,发现这个默认的Exchange并没有显示的绑定任何消息队列。
那为什么可以发送消息给Q1消息队列呢?
因为这个默认的Exchange 已经自动隐式的绑定了所有消息队列,路由key 就是消息队列的名字。
在这里插入图片描述

再发送一条消息到默认的Exchange,路由key是Q3.

在这里插入图片描述

成功发送消息到默认的Exchange。

在这里插入图片描述
在这里插入图片描述




这图跟本章知识点无关,只是记录下这个Comsumers的作用和在哪打开添加
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1087033.html

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

相关文章

如何制件一本优秀的旅游杂志,这有一份操作指南

时间过的好快,一转眼一年已过了一大半,忙碌了一年,也该在这不冷不热的十月,而且充满桂花的香气的时间里停下脚步,带着家人出去畅游一番,开拓一下自己的眼界。那出去游玩肯定少不了记录生活,每到…

在 Elasticsearch 中实现自动完成功能 1:Prefix queries

自动完成与搜索功能不同 - 我们应该在用户键入下一个字符后立即更新自动完成选项,每秒都会访问数据库,过滤数百万条记录,而不会导致任何性能下降! Elasticsearch 是一种可以轻松实现此类功能的技术,它是一种基于 Apac…

低压配电系统中浪涌保护器的作用,安装位置和接线方法

低压配电系统是指在变压器低压侧或用户侧的电气装置,主要用于向用户提供安全、可靠和经济的电能。低压配电系统中常见的电气设备有低压配电柜、分支箱、开关箱、插座、照明等。这些设备都需要防止因外部或内部原因产生的过电压对其造成损坏或影响其正常工作。过电压…

帝国CMS《养生健康》模板/养生网站源码模板/健康模板+养生资讯+优化版

帝国CMS《健康养生》模板,简介大气访问快,养生源码模板,健康模板,百度自动推送,站内关键字改成直接调用tag标签,这样就方便对站内优化已比较好,经测试还容易产生词库。 采用帝国CMS7.5内核,开源不限域名,包含WAP手机端…

键盘录入涉及到的方法

键盘录入涉及到的方法 1)next()、nextLine(): 可以接受任意数据,但是都会返回一个字符串。 2)nextInt(): 只能接受整数。 3)next…

harbor的安装及使用

文章目录 安装harbor仓库具体安装过程测试上传 资源编排就是合理快速的分配计算资源和硬件资源,进行计算。 docker: swarm google: kubernetes (k8s,k3s) opensource: docker-compose 安装harbor仓库 0) 创建/root/harbor目录,cd到此目录 …

同城二手市场生活源码系统+前后端完整搭建教程

大家好啊,今天罗峰给大家分享一个同城二手市场生活源码系统,二手市场在我们的日常生活中也比较常见,传统的二手市场操作起来不是很方便,这款小程序就轻松近实现在家足不出户就可以进行交易。以下是部分代码图: 系统特色…

多媒体应用设计师 第2章 多媒体信息处理及编辑技术

1.多媒体信息的种类与特点 视觉类:文字、图像、图形、视频、动画、其他(视频、符号表示的数值、图形表示的某种数据曲线、数据库的关系数据) 听觉类:波形声音、语音、音乐 多媒体信息特点: 多媒体是有格式的。 越接近…

CSS margin(外边距)

CSS margin(外边距)属性定义元素周围的空间。 margin margin 清除周围的(外边框)元素区域。margin 没有背景颜色,是完全透明的。 margin 可以单独改变元素的上,下,左,右边距,也可以一次改变所…

一键批量转换,轻松将TS视频转为MP4视频,实现更广泛的播放和分享!

在享受精彩视频内容的同时,有时我们可能会面临一个问题:某些视频格式可能不太适合我们的播放设备或分享平台。特别是TS格式的视频,在一些情况下可能无法直接播放或上传。但是不用担心,因为我们为您提供了一款强大的视频剪辑工具&a…

【AI】Datasets

文章目录 DatasetClassificationObject detectionSegmentationHumanFace图像质量 标注工具 Dataset Classification CIFAR-10CIFAR-100COCOImageNetMNISTSVHN Object detection COCOPASCAL VOCCaltech101 Segmentation COCOPASCAL VOCCityscapes datasetLVIS Human Cal…

kafka生产者发送消息报错 Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected

报这个错误是因为kafka里的配置要修改下 在config目录下 server.properties配置文件 这下发送消息就不会一直等待,就可以发送成功了

日历视图,轻松解决时间管理难题_三叠云

日历组件 路径 仪表盘设计 >> 组件 功能简介 仪表盘新增「日历」组件。日历组件是以日历图的形式去呈现数据的一种方式,支持【列表模式】和【面板模式】。 【列表模式】: 通过日历方式筛选数据,数据将会以列表的方式呈现。 【面…

IDEA中点击New没有Java Class

解决办法:右键src,也可以是其他文件名,点击Mark Directory as 点击Sources Root即可

深度综述 | 肠道菌群通过改变宿主表观遗传影响宿主健康:中枢神经系统(CNS)疾病

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 抑郁症、焦虑症和阿尔茨海默病(Alzheimers disease,AD)等中枢神经系统(Central nervous system,CNS)疾病会严重影响…

Python爬虫爬取某会计师协会网站的指定文章(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

苹果ios用户下载ipa文件内测签名的后的app应用下载安装到手机图标消失了-解决方案

下载好的应用竟然找不到了?这么神奇?我尝试了解了一下复原了同学给我的内容果然出现了我尝试科技了一下,总结了以下的可能性!同学如果这个回答解决了你的困扰,同学给个赞,如果你有更好的排查方案评论区分享…

解锁知识管理3.0,生成式人工智能洞察新时代

原创 | 文 BFT机器人 鉴于我们不断使用最新、最好的解决方案,软件、技术和计算创新的巨大飞跃可能具有挑战性。人们很容易忘记技术过去的困境。但对于依赖及时信息和数据的行业(例如企业知识管理)来说,最新的管理技术能带来了巨大…

机器人革命:脑洞大开的前沿机器人技术!

原创 | 文 BFT机器人 01 由生物启发的多模式移动形态机器人 在一个不断运动的世界中,一种新开发的名为M4(多模式移动形态机器人)的机器人展示了在包括滚动、飞行和行走在内的八种不同运动模式之间切换的能力。这款机器人由加州理工学院自主…

Spring Boot 中的 TransactionTemplate 是什么,如何使用

Spring Boot中的TransactionTemplate:简化事务管理 事务管理是任何应用程序中至关重要的部分,特别是在处理数据库操作时。Spring Boot提供了多种方式来管理事务,其中之一是使用TransactionTemplate。本文将深入探讨TransactionTemplate是什么…