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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js如何使多个接口串行访问,并行访问

可以使用async/await来保证多个接口串行访问。async/await提供了一种更清晰的方式来写异步代码,它会在等待一个异步操作完成之后再继续执行 async function fn(urls){ for(let i of urls){ let resawait $.fetch(i) } } fn([http://baidu.com,http://baidu.…

计算机408炸了给25考研人的几点警示

25年408考研,如果只用王道的复习资料,最多考100-120分 就是这么的现实,王道的资料虽然好,但是并不能覆盖全部的知识点和考点,而且24年的408真题考的很怪,总结起来就是下面这些特点: 偏&#xff…

安装PyTorch详细过程

安装anaconda 登录anaconda的官网下载,anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网 跳转到这个页面如果你的Python版本正好是3.8版,那便可以直接根据系统去选择自己相应的下载版本就可以了。 但是如果你的Python版本号不是当前页面…

seata入门到实战三

seata datasourceProxy connectionProxy statementProxy和PreparedStatementProxy abstractStatementProxy SqlRecognizer Executor AT模式二阶段提交 一阶段 二阶段提交 全部事务执行成功 释放锁 提交并删除undo日志 二阶段回滚

科普,三分钟读懂高精度NTP时间服务器、时钟服务器

科普,三分钟读懂高精度NTP时间服务器、时钟服务器 科普,三分钟读懂高精度NTP时间服务器、时钟服务器 我们都知道北京时间作为我们国家的标准时间,是由中国科学院国家授时中心产生、保持和发播的。 中国科学院国家授时中心位于陕西西安临潼&…

【LeetCode: 380. O(1) 时间插入、删除和获取随机元素 + 数据结构设计】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【maven下载、安装、配置教程】

一、下载 maven 官网:Maven – Download Apache Maven 注意:idea 和 maven 的版本问题,不然 idea 启动项目会发生兼容性错误。如 2020 版本 idea 支持 3.6.3 左右的 maven 版本,用 3.9版本的 maven 会报错。 二、配置maven全局配置…

JS-06-数组

一、数组的创建与访问 见:JS-04-javaScript数据类型和变量 JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。 要取得Array的长度,直接访问length属性: let arr [1, 2, 3.14, Hello, null, true]; console.l…

​LeetCode解法汇总1261. 在受污染的二叉树中查找元素

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给出一个满足下述规则的二叉树&#xff1…

京东商品详情接口数据采集—价格,库存,支持高并发

初识API调用 为帮助商家及开发者快速掌握京东API调用方法,本文为大家提供的万邦API工具为例,为读者演示一例API调用过程,并做相应讲解。 item_get-获得JD商品详情 1、API公共参数示例 请求地址: https://api-gw.onebound.cn/jd/item_get …

【汇编】#2 寄存器相关与实模式下的8086存储器寻址

文章目录 前言一、什么是寄存器二、8086寄存器1. 8086通用寄存器2. 段寄存器3.专用寄存器3.1 标志寄存器内部具体标志及其作用 tips: 不同尺寸数据在存储器中存储 三、 实模式存储器寻址逻辑段与小段物理地址计算方式 前言 本文以清华大学出版社的《80x86汇编语言设计》和李忠…

docker + nginx打包前端镜像

项目场景&#xff1a; 前端使用angular开发&#xff0c;Dockerfile如下&#xff1a; FROM nginx:1.16.1 AS base WORKDIR /app COPY nginx.conf.template /etc/nginx/ CMD ["/bin/bash", "-c", "envsubst ${APP_VERSION} < /app/index.html > …

【CSP考点回顾】后缀表达式计算/中缀表达式转后缀表达式

一、后缀表达式计算 后缀表达式&#xff0c;也被称为逆波兰表示法&#xff08;Reverse Polish Notation&#xff0c;简称RPN&#xff09;&#xff0c;是一种不需要括号来标识操作符优先级的数学表达式。在后缀表达式中&#xff0c;所有的操作符都跟随在它们的操作数之后&#x…

Java 错误 java.net.ConnectException

本篇文章介绍了 Java 中的 java.net.ConnectException 错误。 Java 中的 java.net.ConnectException 错误 java.net.ConnectException 是使用网络时最常见的异常。 它主要发生在客户端、应用程序和服务器之间建立 TCP 连接时。 它是一个经过检查的应用程序,可以使用 try-cat…

day2 员工管理 分类管理

文章目录 新增员工RequestBody方法参数注解 接受json数据两个对象之间属性的拷贝MD5加密 新增员工 DTO 用来接收前端传来的参数 vo用于返回数据 pojo和数据库对应 RequestBody方法参数注解 接受json数据 PostMapping("/")public Result save(RequestBody EmployeeD…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Rating)

提供在给定范围内选择评分的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Rating(options?: { rating: number, indicator?: boolean }) 从API version 9开始&#…

pinia和vuex区别?

Pinia 和 Vuex 都是用于 Vue.js 应用状态管理的工具&#xff0c;它们有一些明显的区别&#xff1a; 基于 Vue 3 和 Composition API&#xff1a; Pinia 是为 Vue 3 开发的状态管理库&#xff0c;并且充分利用了 Vue 3 的 Composition API。它提供了一种新的、基于函数的状态管理…

C++从零开始(day49)——AVLTree模拟实现

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于AVLTree模拟实现 1.AVLTree概念 二叉搜索树可…

双场板功率型GaN HEMT中用于精确开关行为的电容建模

来源:Capacitance Modeling in Dual Field-Plate Power GaN HEMT for Accurate Switching Behavior (TED 16年) 摘要 本文提出了一种基于表面电势的紧凑模型&#xff0c;用于描述具有栅极和源极场板&#xff08;FP&#xff09;结构的AlGaN/GaN高电子迁移率晶体管&#xff08;…

嵌入式驱动学习第三周——设备号与字符设备的注册、分配、释放

前言 这一篇博客来谈谈字符设备的注册、分配与释放。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论一起学习。现在关注就是老粉啦&#xff01; 目录 前…