• 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实现消息发送:

    1. package cn.itcast.mq.helloworld;
    2. import org.junit.jupiter.api.Test;
    3. import org.springframework.amqp.rabbit.core.RabbitTemplate;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.boot.test.context.SpringBootTest;
    6. import org.springframework.messaging.Message;
    7. @SpringBootTest
    8. public class SpringAMQPTest {
    9. @Autowired
    10. private RabbitTemplate rabbitTemplate;
    11. @Test
    12. void testSendMessage(){
    13. String queueName = "simple.queue";
    14. String message = "hello,基本消息类型";
    15. rabbitTemplate.convertAndSend(queueName, message);
    16. }
    17. }

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

    代码解析

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

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

    1. @Autowired
    2. private RabbitTemplate rabbitTemplate;
    3. public void sendMessage(String queueName, String message) {
    4. rabbitTemplate.convertAndSend(queueName, message);
    5. }

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

    3.编写消费者代码

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

    然后创建一个类

    1. package cn.itcast.mq.lintener;
    2. import lombok.extern.slf4j.Slf4j;
    3. import org.springframework.amqp.rabbit.annotation.RabbitListener;
    4. import org.springframework.stereotype.Component;
    5. @Slf4j
    6. @Component
    7. public class MQListener {
    8. @RabbitListener(queues = "simple.queue")
    9. public void listenSimpleQueue(String message){
    10. System.out.println("消费者收到了消息: " + message);
    11. }
    12. }

    代码解析

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

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

  • 相关阅读:
    人人都能看懂的量子力学——波动力学的建立过程
    聚焦离子束FIB测试的计量技术规范盘点
    Matlab:运算符和字符
    操作系统分类及Linux
    【问题思考总结】缺页时页表怎么变?【操作系统中的缺页】
    电脑风扇控制软件 Macs Fan Control Pro mac中文版功能介绍
    java计算机毕业设计ssm基金分析系统的设计与实现(源码+系统+mysql数据库+Lw文档)
    软件工程毕业设计课题(13)基于python的毕业设计python教室实验室预约系统毕设作品源码
    文件操作详解
    24.缓存
  • 原文地址:https://blog.csdn.net/weixin_60257917/article/details/136596058