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项目控制台接收信息了。


总结

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

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

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

相关文章

2023年危险化学品生产单位安全生产管理人员证模拟考试题库及危险化学品生产单位安全生产管理人员理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年危险化学品生产单位安全生产管理人员证模拟考试题库及危险化学品生产单位安全生产管理人员理论考试试题是由安全生产模拟考试一点通提供&#xff0c;危险化学品生产单位安全生产管理人员证模拟考试题库是根据危…

JMeter处理接口签名sign

写接口脚本的时候&#xff0c;很多接口涉及到签名&#xff0c;今天介绍下用JMeter编写签名脚本的方法。 举个例子&#xff0c;开启红包接口&#xff0c;请求方式为post POST /v1/api/red/open json请求参数 { "red_id":1, "timestamp":"1667033841…

Epub书籍阅读工具

Epub书籍阅读工具 前言WIndows总结Neat ReaderAquile ReaderWPS Android总结Neat Reader掌阅 前言 Epub文件为电子书文件格式&#xff0c;此格式的电子书相比txt书籍&#xff0c;增加了目录跳转功能&#xff0c;并可以显示图片。本文介绍WIndows和Android端的epub书籍阅读工具…

【Delphi】使用TWebBrowser执行JavaScript命令传入JSON参数执行出错解决方案

目录 一、问题背景&#xff1a; 二、实际示例&#xff1a; 三、解决方案&#xff1a; 1. Delphi 代码&#xff1a; 2. javaScript代码&#xff1a; 一、问题背景&#xff1a; 在用Delphi开发程序&#xff0c;无论是移动端还是PC端&#xff0c;都可以很方便的使用TWebBrows…

网页数据抓取工具推荐:简数采集器

推荐一款好用的网页数据抓取工具&#xff1a;简数采集器&#xff01;&#xff01;&#xff01; 简数采集器不用下载安装软件&#xff0c;直接可以在浏览器上使用&#xff0c;全程云运行&#xff0c;无需挂机&#xff0c;十分方便。 文章数据采集也非常简单&#xff0c;只需输…

进程间通信(管道/消息队列/共享内存/信号量)

目录 一、进程间通信介绍1.1 进程间通信的目的1.2 进程间通信的发展1.3 进程间通信的分类 二、管道2.1 什么是管道&#xff1f;2.2 匿名管道2.3 实现匿名管道通信的代码2.4 用fork来共享管道原理2.5 站在文件描述符角度-深度理解管道2.6 站在内核角度-管道本质2.7 管道读写的规…

Mac中LaTex无法编译的问题

最近在使用TexStudio时&#xff0c;遇到一个棘手的问题&#xff1a; 无法编译&#xff0c;提示如下&#xff1a; kpathsea: Running mktexfmt xelatex.fmt /Library/TeX/texbin/mktexfmt: kpsewhich -var-valueTEXMFROOT failed, aborting early. BEGIN failed–compilation a…

日常办公:批处理编写Word邮件合并获取图片全路径

大家在使用Word邮件合并这个功能&#xff0c;比如制作席卡、贺卡、准考证、员工档案、成绩单、邀请函、名片等等&#xff0c;那就需要对图片路径进行转换处理&#xff0c;此脚本就是直接将图片的路径提取出来&#xff0c;并把内容放到txt格式的文本文档里&#xff0c;打开Excel…

以太坊铭文聚合交易平台 Scorpio,铭文爆发的新推手?

在今年 3 月&#xff0c;Ordinals 凭空问世&#xff0c;定义了一套在比特币网络运行的序数协议&#xff0c;使得 Token 和 NFT 能在比特币网络上实现并稳定运行&#xff0c;拉来了比特币铭文市场的新序幕。而在此后&#xff0c;在包括 BRC20 等在内的一系列应用的出现&#xff…

Web应用系统的小安全漏洞及相应的攻击方式

1 写作目的 本文讲述一个简单的利用WebAPI来进行一次基本没有破坏力的“黑客”行为。 主要目的如下&#xff1a; 了解什么叫安全漏洞知道什么是api了解一些获取api的工具通过对API的认识了解白盒接口测试基本概念和技术 免责声明&#xff1a; 本文主要是以学习交流为目的…

Java 日志门面和日志实现,是否傻傻分不清

参考文章 SLF4J的文档 SLF4J&#xff08;Simple Logging Facade for Java&#xff09;&#xff1a;日志门面Logback&#xff1a;日志实现 <dependency> <groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><versi…