RabbitMQ - 02 - 基本消息模型

目录

部署demo项目

什么是基本消息模型

实现基本消息模型


部署demo项目

首先配置好一个mq的练习demo,并配置好相关依赖

链接:https://pan.baidu.com/s/1oXAqgoz9Y_5V7YxC_rLa-Q?pwd=v2sg

提取码:v2sg

如图

父xml文件已经配置好了 AMQP依赖了

什么是基本消息模型

基本消息模型 : 生产者直接将消息发送到队列,消费者直接监听消息队列, 少了一个交换机接收和路由消息的步骤

实现基本消息模型

1.控制台创建队列

2.编写生产者代码

首先配置MQ地址,在publisher服务的application.yml中添加配置:

复制代码
spring:
  rabbitmq:
    host: 47.115.204.241 # 你的虚拟机IP
    port: 5672 # 端口
    virtual-host: / # 虚拟主机
    username: itheima # 你的用户名
    password: 123321 # 你的密码

在配置虚拟主机时,我最开始用的是ALL,然后报错;了,后来我改为用 / 就成功运行了

在使用 Spring AMQP 进行消息传递时,虚拟主机(Virtual Host)是用于隔离不同应用程序之间的消息队列和交换机的机制。通常情况下,虚拟主机的名称是一个路径样式的字符串,类似于文件系统中的路径,可以使用斜杠 / 来表示不同的层级。

问题可能出在使用 ALL 作为虚拟主机名称时,导致了异常。一般来说,虚拟主机名称中不建议使用特殊字符或保留字,因为这可能会引起解析问题或与系统关键字冲突。

在你的情况下,将虚拟主机名称从 ALL 更改为 / 可能是一个有效的解决方法,因为 / 是一个合法的虚拟主机名称,而且符合常规的命名约定。

请记住,在配置虚拟主机名称时,最好遵循标准的命名约定,避免使用特殊字符或保留字,以确保系统能够正确解析和处理。

然后在publisher服务中编写测试类SpringAmqpTest,并利用RabbitTemplate实现消息发送:

java 复制代码
package cn.itcast.mq.helloworld;

import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.messaging.Message;

@SpringBootTest
public class SpringAMQPTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    void testSendMessage(){
        String queueName = "simple.queue";
        String message = "hello,基本消息类型";
        rabbitTemplate.convertAndSend(queueName, message);
    }
}

查看控制台可以看到收到消息了

代码解析

@Autowired 是 Spring 框架提供的注解,用于自动装配(依赖注入)对象。通过在需要使用的地方添加 @Autowired 注解,Spring 将会根据类型或名称来自动查找相应的 Bean 对象,并将其注入到目标对象中。

rabbitTemplate.convertAndSend(queueName, message) 是 Spring AMQP 提供的方法,用于将消息发送到指定的 RabbitMQ 队列中。它需要传递两个参数:queueName 表示目标队列的名称,message 表示要发送的消息内容。

java 复制代码
@Autowired
private RabbitTemplate rabbitTemplate;

public void sendMessage(String queueName, String message) {
    rabbitTemplate.convertAndSend(queueName, message);
}

总结起来,@Autowired 是用于自动装配对象的注解,而 rabbitTemplate.convertAndSend(queueName, message) 是用于发送消息到 RabbitMQ 的方法。通过结合使用它们,你可以方便地将消息发送到指定的队列中。

3.编写消费者代码

首先在消费者的yml文件也要配置好相关代码

然后创建一个类

java 复制代码
package cn.itcast.mq.lintener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class MQListener {

    @RabbitListener(queues = "simple.queue")
    public void listenSimpleQueue(String message){
        System.out.println("消费者收到了消息: " + message);
    }
}

代码解析

@RabbitListener(queues = "simple.queue") 是 Spring AMQP 中用于声明消息监听器的注解。通过使用这个注解,你可以指定要监听的 RabbitMQ 队列名称,以便在消息到达该队列时执行相应的消息处理逻辑。具体来说,@RabbitListener 注解标记在一个方法上,表示这个方法是一个 RabbitMQ 消息监听器。当监听的队列中有消息到达时,Spring 将自动调用被注解的方法,并将消息内容作为参数传递给这个方法。

在你提供的例子中,@RabbitListener(queues = "simple.queue") 表示将一个方法标记为监听名为 "simple.queue" 的 RabbitMQ 队列的消息。当这个队列中有消息到达时,被注解的方法就会被触发,并处理接收到的消息内容。

相关推荐
Touper.4 分钟前
JavaSE -- 泛型详细介绍
java·开发语言·算法
静若繁花_jingjing21 分钟前
Redis线程模型
java·数据库·redis
hello早上好42 分钟前
CGLIB代理核心原理
java·spring
魔镜魔镜_谁是世界上最漂亮的小仙女43 分钟前
java-web开发
java·后端·架构
爱吃小土豆豆豆豆43 分钟前
定时器和守护线程
java
在肯德基吃麻辣烫1 小时前
《Redis》缓存与分布式锁
redis·分布式·缓存
亲爱的非洲野猪1 小时前
Kafka消息积压全面解决方案:从应急处理到系统优化
分布式·kafka
Seven971 小时前
了解GC吗?什么是GC?
java
Edingbrugh.南空1 小时前
Flink ClickHouse 连接器维表源码深度解析
java·clickhouse·flink
掘金-我是哪吒2 小时前
分布式微服务系统架构第157集:JavaPlus技术文档平台日更-Java多线程编程技巧
java·分布式·微服务·云原生·架构