Rabbit与springboot整合-1
目录
1、整体结构
2、pom引入
3、配置文件
4、代码
公共类
controller类
JSON转换类
监听-接收发送消息类
1、整体结构

2、pom引入
<!--rabbitmq--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency>
3、配置文件

4、代码
公共类

controller类
import com.rabbitmqprovider.commons.CommonUtils;
import com.rabbitmqprovider.vo.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RabbitMQController {Logger LOG = LoggerFactory.getLogger(RabbitMQController.class);@AutowiredAmqpAdmin amqpAdmin;/*** 交换机创建*/@GetMapping("/createExchange")public void createExchange(){// 第一个参数为交换机名字,第二个参数为是否持久化,第三个参数为不使用交换机时删除DirectExchange directExchange = new DirectExchange(CommonUtils.dirExchange,true,false);amqpAdmin.declareExchange(directExchange);System.out.println("交换机创建成功");}/*** 绑定队列*/@GetMapping("/createQueue")public void createQueue() {/*** 第一个参数为队列名字,* 第二个参数为是否持久化,* 第三个参数为是否排他(true:一个连接只能有一个队列,false:一个连接可以有多个(推荐))* 第四个参数为不使用队列时自动删除*/Queue queue = new Queue(CommonUtils.queueStr,true,false,false);amqpAdmin.declareQueue(queue);System.out.println("队列创建成功");}/*** 绑定交换机和队列*/@GetMapping("/createBinding")public void createBinding() {/*** 第一个参数为目的地,就是交换机或者队列的名字* 第二个参数为目的地类型,交换机还是队列* 第三个参数为交换机,QUEUE-队列 EXCHANGE-交换机* 第四个参数为路由键,匹配的名称*/Binding binding = new Binding(CommonUtils.queueStr,Binding.DestinationType.QUEUE,CommonUtils.dirExchange,CommonUtils.routingKey,null);amqpAdmin.declareBinding(binding);System.out.println("绑定成功");}@AutowiredRabbitTemplate rabbitTemplate;/*** 发送消息* 结果:"这是一条消息"*/@GetMapping("/sendMessageTest")public String sendMessageTest(){// 消息类型为object 发送对象也是可以的String msg = "这是一条消息";// 第一个参数为发送消息到那个交换机上,第二个是发送的路由键(交换机进行需要符合绑定的队列),第三个参数为发送的消息rabbitTemplate.convertAndSend(CommonUtils.dirExchange,CommonUtils.routingKey,msg);System.out.println("消息发送成功");return "发送成功;发送内容为:"+msg;}/*** 发送消息* 结果:{"name":"张三、李四","age":22}*/@GetMapping("/sendMessageUserTest")public void sendMessageUserTest(){User user = new User();user.setAge(22);user.setName("张三、李四");// 第一个参数为发送消息到那个交换机上,第二个是发送的路由键(交换机进行需要符合绑定的队列),第三个参数为发送的消息rabbitTemplate.convertAndSend(CommonUtils.dirExchange,CommonUtils.routingKey,user);System.out.println("消息发送成功");}}
JSON转换类

监听-接收发送消息类
@Slf4j
@Service
public class TestService {// queues是监听的队列名字,可以是多个 ,CommonUtils.queueStrTest//接收全部的消息@RabbitListener(queues = {CommonUtils.queueStr})public void reciveMessage(Object message){System.out.println("接收的信息->" + message);}
返回结果:
接收的信息->(
Body:'"这是一条消息"' MessageProperties [headers={__TypeId__=java.lang.String}, contentType=application/json, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, redelivered=false, receivedExchange=helloword-java, receivedRoutingKey=hello.java, deliveryTag=1, consumerTag=amq.ctag-GWK_TTPoabVGD65ZtH81jg, consumerQueue=hello-java-queue])
//使用 @Payload注解 拿到 body的内容
@RabbitListener(queues = {CommonUtils.queueStr})
public void reciveMessage(@Payload String body, Channel channel,@Headers Map<String,Object> headers){System.out.println("接收的信息" + body);
}
返回结果:
接收的信息->这是一条消息
/*** 实体类接收* 接收的信息->张三、李四==22* @param body* @param channel*/
@RabbitListener(queues = {CommonUtils.queueStr})
public void reciveMessage(@Payload User body, Channel channel){System.out.println("接收的信息->" + body.getName()+"=="+body.getAge());
}
}
实体类

结果:
消息发送成功:这是一条消息
接收的信息(Body:'"这是一条消息"' MessageProperties [headers={__TypeId__=java.lang.String}, contentType=application/json, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, redelivered=false, receivedExchange=helloword-java, receivedRoutingKey=hello.java, deliveryTag=3, consumerTag=amq.ctag-cQAY1sFSowAWw2RH8IWuzA, consumerQueue=hello-java-queue])
提醒:刚才再运行项目,发送消息时,总是提示拒绝连接,研究了好长时间发现是端口错误了,我映射的端口是 5673->5672;
相关文章:
Rabbit与springboot整合-1
目录 1、整体结构 2、pom引入 3、配置文件 4、代码 公共类 controller类 JSON转换类 监听-接收发送消息类 1、整体结构 2、pom引入 <!--rabbitmq--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-st…...
项目沟通管理5大技巧 第4个很重要
1、充分使用twitter管理沟通模型 项目沟通会议可以充分使用witter的管理沟通模型,提高会议沟通效率。使用此模型,主要是有三步: 第一步:倾听,项目经理需要保持中立的立场,不先表态,让团队成员畅…...
vector(入门知识点)
目录 vector的介绍 编辑 例:遍历 拷贝: 初始化: 反向迭代器: 扩容: insert与erase vector的介绍 例:遍历 拷贝: 初始化: (10个1) vector<int>注意…...
成人高考专业怎么选?看这三点
专业选得好,以后学习、考试和就业都会走得更加顺畅。 想简单拿个大专或者本科学历文凭,最好选择容易毕业的,比如工商管理、行政管理文史类专业,相对简单容易。 为了满足考证需要的,选对口的专业,比如要考一…...
设计模式:UML中的类图(6种关系)
一.UML图介绍 统一建模语言是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。 二.类图…...
00后卷王的自述,我真有同事口中说的那么卷?
前言 前段时间去面试了一个公司,成功拿到了offer,薪资也从14k涨到了20k,对于工作都还没几年的我来说,还是比较满意的,毕竟一些工作5、6年的可能还没我高。 我可能就是大家口中的卷王,感觉自己年轻…...
VS2022配置OpenGL+GLAD
Glew(The OpenGL Extension Wrangler Library)是对底层OpenGL接口的封装,可以让你的代码跨平台。Glad与Glew作用相同,可以看作它的升级版。 Freeglut(OpenGL Utility Toolkit)主要用于创建并管理窗口和Ope…...
javascript for循环的定义
循环代码可以执行指定的次数 不同类型的循环: javascript支持不同类型的循环 for-循环代码块的一定次数 for/in-循环遍历对象的属性 while-当指定的条件为true时循环指定的代码块 do/while-当指定的条件为true时循环指定的代码块 for循环的语法: …...
【安全与风险】安全研究的新课题
安全研究的新课题 第一部分 主题概述和普适计算目的两种类型的研究人员从事安全和隐私研究关注重点更大的愿景:普适计算什么是普适/泛在计算?普及计算推动者第一个推动者:传感器/执行器例1:无线电传感器例2:RFIDs(“智能标签”)例3:Crowdsensing:实现大规模泛在感知 第二个推动…...
4核8G云服务器腾讯云CVM S5和轻量应用服务器性能差异?
腾讯云4核8G云服务器可以选择轻量应用服务器或CVM云服务器标准型S5实例,轻量4核8G12M服务器446元一年,CVM S5云服务器935元一年,相对于云服务器CVM,轻量应用服务器性价比更高,轻量服务器CPU和CVM有区别吗?性…...
【对比】文心一言对飚ChatGPT实操对比体验
前言 🍊缘由 百度【文心一言】体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来。心中这好奇的对比心理油然而生,到底是老美的【ChatGPT】厉害,还是咱度娘的【文心一…...
C++:Article:链接器(二):符号决议
链接器 1. C源文件都有些什么1.1 . 目标文件里有什么 2. 符号表 Symbol table2.1. 符号表的位置2.2. 符号的决议2.3. 符号决议过程 3. 实例说明3.1. 意外出现3.2 总结排查 在上篇文章中,我们介绍了 链接器基本概念,我们知道所有的应用程序否是连接器将所…...
期权价格上下限与期权平价关系
目录 1. 期权的基本概念 2. 期权的上下限 3. 期权的平价关系 1. 期权的基本概念 期权:是一种选择权,期权买方向卖方支付一定数额的 期权费 后,可获得在 一定时间(到期日)内以 一定价格(执行价格&#x…...
QT中TCP的学习
文章目录 qt中TCP的实现 qt中TCP的实现 学习视频 QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的,我们只需要写相应的槽函数 A、服务器: 创建QTcpServer对象启动服务器(监听&…...
编译选项与常用环境变量
一、编译选项与常用环境变量 1、命令选项 -D 相当于就是定义,-D 可以理解为告诉cmake 后边我要定义一些参数,每定义一个就在前边加上-D就可以了,示例: #!/bin/shcmake -DTEST_DEBUGON . cmake --build .2、编译选项 下面列出来的…...
【SpringBoot2】SpringBoot开发实用篇
SpringBoot开发实用篇 KF-1.热部署 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。 热部署的功能是如…...
接口自动化测试框架搭建全部过程
思想: 1、基本目录的搭建 report:静态输出目录(报告或者日志) data:静态输入目录(可以存放Excel数据,被读取的一些数据) utils:实用方法层(这里存放的是项目的公共方法,一般拿到别…...
SQL学习(十)--DML_多表查询(针对数据表记录的join查询、子查询的操作)
目录 1. 多表查询 -- 内连接查询 1.1 显示内连接 1.2 隐式内连接 2. 多表连接 -- 外连接查询...
Docker容器部署
Docker容器部署 为什么使用Docker什么是Docker类比用途 Docker基于Windows集成IDEA在window上安装docker设置Docker配置IDEA连接Docker测试启动SpringBoot应用测试 Docker基于Linux集成IDEA连接宿主机redis服务连接Docker中redis服务 为什么使用Docker 在和前端联调的过程中&a…...
26岁转行网络安全,成功上岸安全开发!
前言 我是去年 9 月 22 日才正式学习网络安全的,之前在国营单位工作了 4 年,在长沙一个月工资只有 5000 块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。 而且国营单位的气氛是你干的多了&a…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
