当前位置: 首页 > news >正文

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 # 你的虚拟机IPport: 5672 # 端口virtual-host: / # 虚拟主机username: itheima # 你的用户名password: 123321 # 你的密码

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

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

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

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

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

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

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 {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testvoid 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 表示要发送的消息内容。

@Autowired
private RabbitTemplate rabbitTemplate;public void sendMessage(String queueName, String message) {rabbitTemplate.convertAndSend(queueName, message);
}

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

3.编写消费者代码

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

然后创建一个类

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

相关文章:

  • vue中性能优化
  • Linux Docker安装redis缓存数据库
  • 怎么做加密文件二维码?分享文件更安全
  • 会话_过滤器_监听器笔记
  • 基于鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)的无人机三维路径规划
  • 大数据开发(Hadoop面试真题-卷四)
  • C++的一些基础语法
  • ARM基础----STM32处理器操作模式
  • 深度学习-Softmax 回归 + 损失函数 + 图片分类数据集
  • (南京观海微电子)——I3C协议介绍
  • 2024 年中国高校大数据挑战赛赛题 C:用户对博物馆评论的情感分析完整思路以及源代码分享
  • 电脑工作电压是多少你要看看光驱电源上面标的输入电压范围
  • 01_Maven
  • CVPR 2022 Oral | Bailando: 基于编舞记忆和Actor-Critic GPT的3D舞蹈生成
  • [论文笔记] Open-sora 2、视频数据集介绍 MSR-VTT
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • FastReport在线报表设计器工作原理
  • flutter的key在widget list的作用以及必要性
  • Java知识点总结(JavaIO-打印流)
  • Laravel 菜鸟晋级之路
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • PhantomJS 安装
  • Python语法速览与机器学习开发环境搭建
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 对超线程几个不同角度的解释
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (C++20) consteval立即函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (笔试题)分解质因式
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • [.NET]桃源网络硬盘 v7.4
  • [20161101]rman备份与数据文件变化7.txt
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [Design Pattern] 工厂方法模式
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • [Excel VBA]单元格区域引用方式的小结
  • [FFmpeg学习]从视频中获取图片
  • [hdu 2896] 病毒侵袭 [ac自动机][病毒特征码匹配]
  • [HNOI2008]Cards
  • [iOS]iOS获取设备信息经常用法