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 队列的消息。当这个队列中有消息到达时,被注解的方法就会被触发,并处理接收到的消息内容。

相关推荐
虾条_花吹雪3 分钟前
2、Connecting to Kafka
分布式·ai·kafka
考虑考虑37 分钟前
JDK9中的dropWhile
java·后端·java ee
想躺平的咸鱼干1 小时前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程
hqxstudying1 小时前
java依赖注入方法
java·spring·log4j·ioc·依赖
·云扬·1 小时前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
Edingbrugh.南空2 小时前
Hadoop高可用集群搭建
大数据·hadoop·分布式
Bug退退退1232 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
小皮侠2 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
Zz_waiting.3 小时前
Javaweb - 10.4 ServletConfig 和 ServletContext
java·开发语言·前端·servlet·servletconfig·servletcontext·域对象
全栈凯哥3 小时前
02.SpringBoot常用Utils工具类详解
java·spring boot·后端