前言

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


一、数据隔离

1.用户管理

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

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

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

在这里插入图片描述

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,可以看到信息了

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

三、编程收发

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 # 你的虚拟机IP
    port: 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 {
    @Resource
    private RabbitTemplate rabbitTemplate;

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

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


总结

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

原文地址:https://blog.csdn.net/weixin_62951900/article/details/134561443

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_13863.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注