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

RabbitMQ快速入门(简单收发消息)

文章目录

  • 前言
  • 一、数据隔离
    • 1.用户管理
    • 2.virtual host
  • 二、控制台收发
    • 1.交换机
    • 2.队列
    • 3.绑定
  • 三、编程式收发
    • 1.依赖和配置
    • 2.收发信息
  • 总结


前言

1.了解数据隔离
2.RabbitMQ控制台收发信息
3.SpringBoot整合RabbitMQ收发信息


一、数据隔离

1.用户管理

点击Admin选项卡,首先会看到RabbitMQ控制台的用户管理界面

在这里插入图片描述
这里的用户都是RabbitMQ的管理或运维人员。仔细观察用户表格中的字段,如下:

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

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

  • 给每个项目创建独立的运维账号,将管理权限分离。
  • 给每个项目创建不同的virtual host,将每个项目的数据隔离。 比如,我们给自己项目创建一个新的用户,命名为dragon,权限为admin

在这里插入图片描述

2.virtual host

创建完用户,你会发现你的用户是这样:
在这里插入图片描述
别急,需要授权,为你创建的用户绑定管理的虚拟机。登录你刚才创建的用户。
在这里插入图片描述
/代表默认虚拟机,我们可以给自己的项目创建一个单独的virtual host,而不是使用默认的/。

在这里插入图片描述
由于我们是登录dragon账户后创建的virtual host,因此回到users菜单,你会发现当前用户已经具备了对/dragon这个virtual host的访问权限了
在这里插入图片描述
如果你以前在默认的用户或者你创建的其他用户创建了队列,交换机,你可以看到全部没有,这就是隔离效果,互不干扰。就在当前用户当前绑定授权的虚拟机操作。

二、控制台收发

如果RabbitMQ安装有问题,可以看我文章Docker中的快速安装RaabbitMQ

1.交换机

点击Exchanges选项卡,可以看出很多交换机

在这里插入图片描述

我们点击任意交换机,即可进入交换机详情页面。仍然会利用控制台中的publish message 发送一条消息:

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

在这里插入图片描述

这里是由控制台模拟了生产者发送的消息(这里的生产者就是交换机),可以看到拒绝了,这样说明交换机没有存储消息的能力,由于没有消费者存在,最终消息丢失了。交换机只负责路由分发消息,所以我们创建队列,也就是消费者来处理接收消息,让交换机(生产者)有分发消息的对象。

2.队列

我们打开Queues选项卡,新建一个队列:hello.queue1、hello.queue2

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

此时,我们再次向amq.fanout交换机发送一条消息。会发现消息依然没有到达队列!!
怎么回事呢?
发送到交换机的消息,只会路由到与其绑定的队列,因此仅仅创建队列是不够的,我们还需要将其与交换机绑定。

3.绑定

点击Exchanges选项卡,点击amq.fanout交换机,进入交换机详情页,然后点击Bindings菜单,在表单中填写要绑定的队列名称

在这里插入图片描述

再次进入绑定队列的交换机内发送信息,回到Queues页面,可以发现hello.queue中已经有一条消息了

在这里插入图片描述

点击队列名称,进入详情页,查看队列详情,这次我们点击get message,可以看到信息了

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

三、编程式收发

  • 将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不同语言的客户端。但是,RabbitMQ官方提供的Java客户端编码相对复杂,一般生产环境下我们更多会结合Spring来使用。而Spring的官方刚好基于RabbitMQ提供了这样一套消息收发的模板工具:SpringAMQP。并且还基于SpringBoot对其实现了自动装配,使用起来非常方便。
  • SpringAMQP提供了三个功能:
    • 自动声明队列、交换机及其绑定关系
    • 基于注解的监听器模式,异步接收消息
    • 封装了RabbitTemplate工具,用于发送消息

1.依赖和配置

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies>
spring:rabbitmq:host: 192.168.198.148 # 你的虚拟机IPport: 5673 # 端口virtual-host: /dragon # 虚拟主机username: dragon # 用户名password: 123 # 密码

2.收发信息

这里是创建两个springboot项目,在途中pom.xml文件粘贴依赖,在这两个项目内的application.yaml粘贴配置。并且我在控制台也已经手动创建simple.queue队列。

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

接收消息:
随便创建个类写如下代码

@Component
public class SpringRabbitListener {// 利用RabbitListener来声明要监听的队列信息// 将来一旦监听的队列中有了消息,就会推送给当前服务,调用当前方法,处理消息。// 可以看到方法体中接收的就是消息体的内容@RabbitListener(queues = "simple.queue")//队列名public void listenSimpleQueueMessage(String msg) throws InterruptedException {System.out.println("spring 消费者接收到消息:【" + msg + "】");}
}

发送消息:
在publisher项目的测试类里写如下代码

@SpringBootTest
public class SpringAmqpTest {@Resourceprivate RabbitTemplate rabbitTemplate;@Testpublic void testSimpleQueue() {// 队列名称String queueName = "simple.queue";// 消息String message = "hello, spring amqp!";// 发送消息rabbitTemplate.convertAndSend(queueName, message);}
}

先运行consumer项目的启动类,再运行测试类发送信息,就可以看到在consumer项目控制台接收信息了。


总结

以上就是简单的消息收发,具体的编程化创建虚拟机,队列以及收发信息,我会在讲解交换机的文章中讲解。

相关文章:

RabbitMQ快速入门(简单收发消息)

文章目录 前言一、数据隔离1.用户管理2.virtual host 二、控制台收发1.交换机2.队列3.绑定 三、编程式收发1.依赖和配置2.收发信息 总结 前言 1.了解数据隔离 2.RabbitMQ控制台收发信息 3.SpringBoot整合RabbitMQ收发信息 一、数据隔离 1.用户管理 点击Admin选项卡&#xff0…...

java面试-zookeeper

1、什么是zap协议 ZAB 协议总共包含以下两部分内容&#xff1a; ZAB 协议通过两阶段提交的方式来确保分布式系统的一致性。这两阶段分别是&#xff1a;准备阶段和提交阶段。在准备阶段&#xff0c;一个节点&#xff08;称为 Leader&#xff09;向其他节点&#xff08;称为 Fol…...

VBA技术资料MF85:将工作簿批量另存为PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…...

大数据-计算框架选型与对比

计算框架选型与对比 一、大数据平台二、计算框架分类1.批处理架构2.实时流处理架构3.流批一体处理架构 三、计算框架关键指标1.处理模式2.可伸缩性3.消息传递3.1 至少一次&#xff08;at least once&#xff09;3.2 至多一次&#xff08;ai most once&#xff09;3.3 恰好一次&…...

2023亚太杯数学建模C题思路 - 我国新能源电动汽车的发展趋势

1 赛题 问题C 我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源( 非常规汽车燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;将先进技术进行汽车动力控制和驱动相结 合的汽车。新能源汽车主要包括四种类型&#x…...

【02】ES6:let 和 const 命令

一、let 命令 ES6 新增了 let 命令&#xff0c;用来声明变量。相对于 var 命令&#xff0c;有以下特点。 1、存在块级作用域 let 拥有块级作用域&#xff0c;声明的变量仅在块级作用域内有效。 // let 存在块级作用域&#xff0c;变量 a 只在当前代码块有效&#xff0c;在代…...

230814期就业平均薪资:8146元——转行是男人最好的医美!~

记得三个月前&#xff0c;很多同学在从事着跟后台网优完全不同的工作&#xff0c;虽然岗位不一样&#xff0c;但是薪资低&#xff0c;重复性劳动&#xff0c;加班多&#xff0c;发展受限&#xff0c;大家都一样身心饱受折磨......回头看&#xff0c;如梦般不真实&#xff0c;却…...

shell脚本三

目录 一、循环语句 一、循环 二、for循环语句 1.列表循环 2.与c语言循环相似的for循环 3.使用for打印三角形以及乘法表 4.测试172.16.114.0网段存活的主机并将存活的主机IP地址写入文件中&#xff0c;未存活的主机放入另一文件中 三、while循环语句 四、until循环语句…...

地埋式积水监测仪厂家直销推荐,致力于积水监测

地埋式积水监测仪是一种高科技设备&#xff0c;能够实时监测地面积水深度&#xff0c;并及时发出预警信息&#xff0c;有效避免因积水而产生的安全隐患。这种智能监测仪可以安装在城市道路、立交桥、地下车库等易积水地势较低的地方&#xff0c;以确保及时监测特殊地段的积水&a…...

CentOS7安装部署Kafka with KRaft

文章目录 CentOS7安装部署Kafka with KRaft一、前言1.简介2.架构3.环境 二、正文1.部署服务器2.基础环境1&#xff09;主机名2&#xff09;Hosts文件3&#xff09;关闭防火墙4&#xff09;JDK 安装部署 3.单机部署1&#xff09;下载软件包2&#xff09;修改配置文件3&#xff0…...

Java,数据结构与集合源码,关于Map接口的实现类(HashMap、LinkedHashMap)

HashMap中的元素的特点&#xff1a; HashMap中的所有key之间是不可重复的、无序的。所有的key构成一个Set集合。 HashMap中的所有的value彼此之间是可重复的、无序的。所有的value构成一个Collection集合。 HashMap中的一对key-value&#xff0c;就构成了一个entry。Map中的ent…...

【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断

GUI编程 04 贪吃蛇小游戏 4.4 第四步&#xff1a;食物及成绩判断 首先&#xff0c;添加食物与分数的数据定义&#xff1a; //食物的坐标int foodX;int foodY;Random random new Random();//积分面板数据结构int score;在初始化方法中&#xff0c;添加(画出)食物与分数&…...

洗地机哪个牌子好用?洗地机选购攻略

传统的清洁方式都是扫把拖把的结合&#xff0c;既繁琐也劳累&#xff0c;每次清洁完后还得累的腰酸背痛的&#xff0c;像厨房这种地方甚至会不容易清洁干净&#xff0c;总感觉地板灰蒙蒙的。洗地机的诞生就很好的解决了这些问题&#xff0c;不用一遍遍的重复扫地拖地擦地&#…...

节能灯和led灯哪个更护眼?精选高品质的LED护眼台灯

节能灯和LED灯相比&#xff0c;我认为LED灯会更加护眼一些&#xff0c;不过想要更护眼建议选择LED的护眼台灯会更好&#xff01; 大家都知道光亮对于我们来说是非常重要的&#xff0c;尤其是夜晚的时候&#xff0c;往往要借助一些灯具来提供充足的照明。对于孩子而言&#xff0…...

大数据管家 DataSophon 1.2介绍

DataSophon 1.2...

vue实现爱心形状的复选框

目录 HTML代码&#xff1a; CSS代码&#xff1a; Vue代码&#xff1a; 这个例子使用了CSS来创建一个爱心形状的复选框&#xff0c;并使用Vue来控制其选中状态。点击复选框时&#xff0c;将调用toggleChecked方法来切换checked属性的值&#xff0c;以控制复选框的状态。 以下…...

珠江啤酒坚持创新,“酿”造电子化采购平台

珠江啤酒 广州珠江啤酒股份有限公司&#xff08;简称“珠江啤酒”&#xff09;是一家以啤酒酿造产业和啤酒文化产业“双主业”协同发展、包装产业配套发展的大型现代化国有控股企业。2010年&#xff0c;在深交所上市&#xff0c;下属企业16家&#xff0c;其中啤酒企业12家&…...

数据仓库模式之详解 Inmon 和 Kimball

目录 一、前言 二、企业信息工厂&#xff08;Inmon&#xff09; 2.1 概念 2.2 主要组件 2.3 流程 三、多维数据仓库&#xff08;Kimball&#xff09; 3.1 概念 3.2 核心组件 3.3 流程 四、异同及用途对比 4.1 异同对比 4.2 特征比较 一、前言 大部分关于数据仓库构建…...

斐波那契数列数列系列问题详解

斐波那契数列数列是我们学习递归的入门问题&#xff0c;是一种非常经典的题型&#xff0c;也衍生出了一些更复杂的题型&#xff0c;这一节就让我们彻底理解斐波那契数列系列问题。 一、概念介绍 1、什么是斐波那契数列&#xff1f; 斐波那契数列&#xff08;Fibonacci sequenc…...

Day38力扣打卡

打卡记录 网格中的最小路径代价&#xff08;动态规划&#xff09; 链接 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])f [[0x3f3f3f3f3f] * n for _ in range(m)]f[0] grid[0]for i i…...

免费多语言编程学习资源大集合:含书籍、课程、播客,点击即享!

资源查找 你可以在 https://ebookfoundation.github.io/free-programming-books-search/ 搜索该列表。此页面以易于阅读的网站形式呈现&#xff0c;点击即可访问。 资源简介 该列表最初是 StackOverflow "免费编程书籍列表"的复刻版本&#xff0c;由 Karan Bhangui 和…...

GD32F4xx时钟树避坑指南:HXTAL选8M还是25M?AHB分频怎么设性能最优?

GD32F4xx时钟树实战解析&#xff1a;晶振选型与总线分频的黄金法则 在嵌入式系统设计中&#xff0c;时钟配置往往是最容易被低估的关键环节。当我在去年负责一个工业网关项目时&#xff0c;曾因为草率选择了25MHz外部晶振而遭遇产品批量返修的惨痛教训——在高温环境下&#xf…...

Win10重装避坑指南:为什么你的U盘启动盘总失败?Rufus设置与BIOS排查全解析

Win10重装避坑指南&#xff1a;为什么你的U盘启动盘总失败&#xff1f;Rufus设置与BIOS排查全解析 每次重装系统都像在拆盲盒&#xff1f;明明跟着教程一步步操作&#xff0c;却在U盘启动这关频频翻车。别急着怪自己手残&#xff0c;这可能是你掉进了技术宅们不会告诉你的那些坑…...

OpenClaw Wiki:构建本地AI智能体结构化知识库的实践指南

1. 项目概述&#xff1a;为你的AI伙伴打造一个本地知识库 如果你和我一样&#xff0c;在本地运行着像OpenClaw这样的AI智能体&#xff0c;那你一定遇到过这个甜蜜的烦恼&#xff1a;这些小家伙每天都在“做梦”、学习、生成海量的记忆数据。这些记忆以Markdown文件和SQLite数据…...

AI对话生成PPT:基于LLM与python-pptx的自动化方案解析

1. 项目概述&#xff1a;当PPT制作遇上AI对话如果你和我一样&#xff0c;经常需要制作各种汇报、方案或者教学用的PPT&#xff0c;那你一定对“找模板、调格式、写文案、配图表”这个循环往复的过程感到疲惫。传统的PPT制作工具&#xff0c;无论是PowerPoint还是Keynote&#x…...

AI代码生成工具评测:Copilot vs. CodeWhisperer实战对比

AI代码生成工具对测试工作的范式影响在软件测试领域&#xff0c;技术栈的演进从未停歇。从自动化测试框架的普及&#xff0c;到DevOps与持续集成/持续交付&#xff08;CI/CD&#xff09;的深度融合&#xff0c;测试从业者始终站在技术变革的前沿。如今&#xff0c;以GitHub Cop…...

别再只复现漏洞了!手把手教你为Discuz X3.4远程执行漏洞写一个修复补丁

从攻击到防御&#xff1a;Discuz X3.4远程执行漏洞的工程化修复指南 当开源论坛系统Discuz X3.4的远程代码执行漏洞被公开时&#xff0c;技术社区的反应呈现两极分化&#xff1a;一部分人热衷于复现漏洞证明危害&#xff0c;另一部分人则急于寻找临时屏蔽方案。但真正被忽视的&…...

给TMS320F28335的存储空间画张“地图”:从零理解存储器与寄存器映射(附CCS实战)

给TMS320F28335的存储空间画张"地图"&#xff1a;从零理解存储器与寄存器映射&#xff08;附CCS实战&#xff09; 第一次接触DSP开发时&#xff0c;最让我头疼的就是那些密密麻麻的地址和寄存器名称。直到有天我盯着城市交通图发呆&#xff0c;突然意识到——芯片内…...

解锁Win10新姿势:用WSL2+AirSim+PX4+MAVROS搭建你的无人机算法“炼丹炉”

解锁Win10新姿势&#xff1a;用WSL2AirSimPX4MAVROS搭建你的无人机算法“炼丹炉” 当无人机算法开发遇上Windows系统&#xff0c;传统认知总认为这是条荆棘之路——直到WSL2的出现彻底改变了游戏规则。想象一下&#xff0c;在熟悉的Windows环境中&#xff0c;你既能享受Linux的…...

Fish Speech 1.5语音合成审计追踪:全链路操作日志与语音生成溯源

Fish Speech 1.5语音合成审计追踪&#xff1a;全链路操作日志与语音生成溯源 1. 语音合成审计的重要性 在日常工作中&#xff0c;我们经常需要回答这样的问题&#xff1a;"这段语音是什么时候生成的&#xff1f;"、"谁操作了这个语音合成任务&#xff1f;&quo…...