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

Spring 整合RabbitMQ,笔记整理

1.创建生产者工程  

spring-rabbitmq-producer

2.pom.xml添加依赖

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>2.1.8.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId> <version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.1.7.RELEASE</version></dependency>
</dependencies>

3.创建rabbitmq.properties

rabbitmq.host=192.168.64.139
rabbitmq.port=5672
rabbitmq.username=javacto
rabbitmq.password=javacto
rabbitmq.virtual-host=/javacto

4.创建spring-rabbitmq-producer.xml 整合配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit.xsd"><!--加载配置文件--><context:property-placeholder location="classpath:rabbitmq.properties"/><!-- 定义rabbitmq connectionFactory --><rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"port="${rabbitmq.port}"username="${rabbitmq.username}"password="${rabbitmq.password}"virtual-host="${rabbitmq.virtual-host}"/><!--定义管理交换机、队列--><rabbit:admin connection-factory="connectionFactory"/><!--定义持久化队列,不存在则自动创建;不绑定到交换机则绑定到默认交换机默认交换机类型为direct,名字为:"",路由键为队列的名称--><!--id:bean的名称name:queue的名称auto-declare:自动创建auto-delete:自动删除。 最后一个消费者和该队列断开连接后,自动删除队列exclusive:是否独占durable:是否持久化--><rabbit:queue id="spring_queue" name="spring_queue"    auto-declare="true"/><!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~广播;所有队列都能收到消息~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --><!--定义广播交换机中的持久化队列,不存在则自动创建--><rabbit:queue id="spring_fanout_queue_1" name="spring_fanout_queue_1" auto-declare="true"/><!--定义广播交换机中的持久化队列,不存在则自动创建--><rabbit:queue id="spring_fanout_queue_2" name="spring_fanout_queue_2" auto-declare="true"/><!--定义广播类型交换机;并绑定上述两个队列--><rabbit:fanout-exchange id="spring_fanout_exchange" name="spring_fanout_exchange"  auto-declare="true"><rabbit:bindings><rabbit:binding  queue="spring_fanout_queue_1"  /><rabbit:binding queue="spring_fanout_queue_2"/></rabbit:bindings></rabbit:fanout-exchange><!--<rabbit:direct-exchange name="aa" ><rabbit:bindings>&lt;!&ndash;direct 类型的交换机绑定队列  key :路由key  queue:队列名称&ndash;&gt;<rabbit:binding queue="spring_queue" key="xxx"></rabbit:binding></rabbit:bindings></rabbit:direct-exchange>--><!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~通配符;*匹配一个单词,#匹配多个单词 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --><!--定义广播交换机中的持久化队列,不存在则自动创建--><rabbit:queue id="spring_topic_queue_star" name="spring_topic_queue_star"  auto-declare="true"/><!--定义广播交换机中的持久化队列,不存在则自动创建--><rabbit:queue id="spring_topic_queue_well" name="spring_topic_queue_well" auto-declare="true"/><!--定义广播交换机中的持久化队列,不存在则自动创建--><rabbit:queue id="spring_topic_queue_well2" name="spring_topic_queue_well2" auto-declare="true"/><rabbit:topic-exchange id="spring_topic_exchange"  name="spring_topic_exchange" auto-declare="true"><rabbit:bindings><rabbit:binding pattern="javacto.*"  queue="spring_topic_queue_star"/><rabbit:binding pattern="javacto.#" queue="spring_topic_queue_well"/><rabbit:binding pattern="adam8831.#" queue="spring_topic_queue_well2"/></rabbit:bindings></rabbit:topic-exchange><!--定义rabbitTemplate对象操作可以在代码中方便发送消息--><rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"/>
</beans>

5.创建测试文件发送消息\src\test\java\com\javacto\rabbitmq\ProducerTest.java

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ="classpath:spring-rabbitmq-producer.xml")
public class ProductTest {//1.注入RabbitTemplate@Autowiredprivate RabbitTemplate rabbitTemplate;//2.发送消息@Testpublic  void testHelloWorld(){rabbitTemplate.convertAndSend("spring_queue","hello world spring");}//2.发送消息@Testpublic  void testFanout(){rabbitTemplate.convertAndSend("spring_fanout_exchange","","spring fanout...");}//2.发送消息@Testpublic  void testTopics(){rabbitTemplate.convertAndSend("spring_topic_exchange","javacto.add","spring topic...");}
}

1.创建消费者工程  

spring-rabbitmq-consumer

2.pom.xml添加依赖

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>2.1.8.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId> <version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.1.7.RELEASE</version></dependency>
</dependencies>

3.创建rabbitmq.properties

rabbitmq.host=192.168.64.139
rabbitmq.port=5672
rabbitmq.username=javacto
rabbitmq.password=javacto
rabbitmq.virtual-host=/javacto

4.创建spring-rabbitmq-producer.xml 整合配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit.xsd"><!--加载配置文件--><context:property-placeholder location="classpath:rabbitmp.properties"/><!-- 定义rabbitmq connectionFactory --><rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"port="${rabbitmq.port}"username="${rabbitmq.username}"password="${rabbitmq.password}"virtual-host="${rabbitmq.virtual-host}"/><bean id="springQueueListener" class="com.javacto.rabbitmq.listener.SpringQueueListener"/><!--<bean id="fanoutListener1" class="com.javacto.rabbitmq.listener.FanoutListener1"/><bean id="fanoutListener2" class="com.javacto.rabbitmq.listener.FanoutListener2"/><bean id="topicListenerStar" class="com.javacto.rabbitmq.listener.TopicListenerStar"/><bean id="topicListenerWell" class="com.javacto.rabbitmq.listener.TopicListenerWell"/><bean id="topicListenerWell2" class="com.javacto.rabbitmq.listener.TopicListenerWell2"/>
--><rabbit:listener-container connection-factory="connectionFactory" auto-declare="true"><rabbit:listener ref="springQueueListener" queue-names="spring_queue"/><!-- <rabbit:listener ref="fanoutListener1" queue-names="spring_fanout_queue_1"/><rabbit:listener ref="fanoutListener2" queue-names="spring_fanout_queue_2"/><rabbit:listener ref="topicListenerStar" queue-names="spring_topic_queue_star"/><rabbit:listener ref="topicListenerWell" queue-names="spring_topic_queue_well"/><rabbit:listener ref="topicListenerWell2" queue-names="spring_topic_queue_well2"/>--></rabbit:listener-container>
</beans>

 5.队列监听器  创建 com.javacto.rabbitmq.listener.SpringQueueListener

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
public class SpringQueueListener  implements MessageListener {public void onMessage(Message message) {//打印消息System.out.println(new String(message.getBody()));}
}

6.创建ConsumerTest 文件

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-rabbitmp-consumer.xml")
public class ConsumerTest {@Testpublic  void test01(){while (true){}}
}
  1. 广播监听器spring配置文件代码   
    FanoutListener1 类同  SpringQueueListener类代码一模一样
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit.xsd"><!--加载配置文件--><context:property-placeholder location="classpath:rabbitmp.properties"/><!-- 定义rabbitmq connectionFactory --><rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"port="${rabbitmq.port}"username="${rabbitmq.username}"password="${rabbitmq.password}"virtual-host="${rabbitmq.virtual-host}"/><bean id="springQueueListener" class="com.javacto.rabbitmq.listener.SpringQueueListener"/><bean id="fanoutListener1" class="com.javacto.rabbitmq.listener.FanoutListener1"/><bean id="fanoutListener2" class="com.javacto.rabbitmq.listener.FanoutListener2"/><!--<bean id="topicListenerStar" class="com.javacto.rabbitmq.listener.TopicListenerStar"/><bean id="topicListenerWell" class="com.javacto.rabbitmq.listener.TopicListenerWell"/><bean id="topicListenerWell2" class="com.javacto.rabbitmq.listener.TopicListenerWell2"/>--><rabbit:listener-container connection-factory="connectionFactory" auto-declare="true"><rabbit:listener ref="springQueueListener" queue-names="spring_queue"/><rabbit:listener ref="fanoutListener1" queue-names="spring_fanout_queue_1"/><rabbit:listener ref="fanoutListener2" queue-names="spring_fanout_queue_2"/><!--<rabbit:listener ref="topicListenerStar" queue-names="spring_topic_queue_star"/><rabbit:listener ref="topicListenerWell" queue-names="spring_topic_queue_well"/><rabbit:listener ref="topicListenerWell2" queue-names="spring_topic_queue_well2"/>--></rabbit:listener-container>
</beans>

相关文章:

Spring 整合RabbitMQ,笔记整理

1.创建生产者工程 spring-rabbitmq-producer 2.pom.xml添加依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.7.RELEASE</version></dep…...

Lua 语言笔记(一)

1. 变量命名规范 弱类型语言(动态类型语言)&#xff0c;定义变量的时候&#xff0c;不需要类型修饰 而且&#xff0c;变量类型可以随时改变每行代码结束的时候&#xff0c;要不要分号都可以变量名 由数字&#xff0c;字母下划线组成&#xff0c;不能以数字开头&#xff0c;也不…...

【Redis】什么是缓存穿透,如何预防缓存穿透?

【Redis】什么是缓存穿透&#xff0c;如何预防缓存穿透&#xff1f; 缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存中不存在&#xff0c;这时会去数据库查询查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到数据库去查询&#xff0c;这…...

LeetCode128.最长连续序列

我这个方法有点投机取巧了&#xff0c;题目说时间复杂度最多O(n),而我调用了Arrays.sort(&#xff09;方法&#xff0c;他的时间复杂度是n*log(n)&#xff0c;但是AC了&#xff0c;这样的话这道题还是非常简单的&#xff0c;创建一个Hashmap&#xff0c;以nums数组的元素作为ke…...

Datawhale Django入门组队学习Task02

Task02 首先启动虚拟环境&#xff08;复习一下之前的&#xff09; 先退出conda的&#xff0c; conda deactivate然后cd到我的venv下面 &#xff0c;然后cd 到 scripts&#xff0c;再 activate &#xff08;powershell里面&#xff09; 创建admin管理员 首先cd到项目路径下&a…...

PCTA 认证考试高分通过经验分享

作者&#xff1a; msx-yzu 原文来源&#xff1a; https://tidb.net/blog/0b343c9f 序言 我在2023年8月10日&#xff0c;参加了 PingCAP 认证 TiDB 数据库专员 V6 考试 &#xff0c;并以 90分 的成绩通过考试。 考试总分是100分&#xff0c;超过60分就算通过考试。试卷…...

[Python]pytorch与C交互

文章目录 C库ctypes基础数据类型参数与返回值类型数组指针结构体类型回调函数工具函数 示例 ctypes是Python的外部函数&#xff0c;提供了与C兼容的类型&#xff0c;并允许调用DLL库中的函数。 C库 要使函数能被Python调用&#xff0c;需要编译为动态库&#xff1a; # -fPIC…...

C语言,静态变量static基础及使用实列

static关键字有多种用途。以下是关于静态变量 (static) 的简要概述&#xff1a; 1.静态局部变量&#xff1a; - 在函数内部定义的静态变量。 - 生命周期&#xff1a;从程序开始执行到程序结束。 - 作用域&#xff1a;仅限于在其被定义的函数中。 - 每次调用该函数…...

2023.8.19-2023.8.XX 周报【人脸3D+虚拟服装方向基础调研-Cycle Diffusion\Diffusion-GAN\】更新中

学习目标 1. 这篇是做diffusion和gan结合的&#xff0c;可以参照一下看看能不能做cyclegan的形式&#xff0c;同时也可以调研一下有没有人follow这篇论文做了类似cyclegan的事情 Diffusion-GAN论文精读https://arxiv.org/abs/2206.02262 2. https://arxiv.org/abs/2212.06…...

微表情识别(Python编程,cnn模型)

1.数据集包括7种类别微表情 anger文件夹&#xff0c;3995张 disgust文件夹&#xff0c; 436张照片 fear文件夹&#xff0c;4097张照片 happy文件夹&#xff0c;7215张照片 neutral文件夹&#xff0c;4965张照片 sad文件夹&#xff0c;4830张照片 surprised文件夹&#xff0c; 3…...

More Effective C++学习笔记(2)

目录 条款5&#xff1a;对定制的"类型转换函数"保持警觉条款6&#xff1a;自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别条款7&#xff1a;千万不要重载&&&#xff0c;||和&#xff0c;操作符条款8&#xff1a;了解各种不同意义的new和de…...

零售行业供应链管理核心KPI指标(三)

完美订单满足率和退货率 完美订单满足率有三个方面的因素影响&#xff1a;订单按时、足量、无损交货。通常情况下零售企业追求线上订单履行周期慢慢达到行业平均水平&#xff0c;就是交付的速度变快了&#xff0c;这个肯定是一件好事情&#xff0c;趋势越来越好。 同时&#…...

广州华锐互动:奶牛难产原因及救治VR仿真实训系统

奶牛难产是一种常见的疾病&#xff0c;对奶牛的健康和生产造成很大的影响。为了解决这一问题&#xff0c;许多奶牛养殖场开始采用VR仿真技术来培训奶牛兽医&#xff0c;帮助学生更好地理解奶牛养殖的实际过程&#xff0c;提高他们的实践能力的教学方式。 VR技术开发公司广州华锐…...

神经网络基础-神经网络补充概念-62-池化层

概念 池化层&#xff08;Pooling Layer&#xff09;是深度学习神经网络中常用的一种层级结构&#xff0c;用于减小输入数据的空间尺寸&#xff0c;从而降低模型的计算复杂度&#xff0c;减少过拟合&#xff0c;并且在一定程度上提取输入数据的重要特征。池化层通常紧跟在卷积层…...

第8章:集成学习

个体与集成 同质&#xff1a;相同的基学习器&#xff0c;实现容易&#xff0c;但是很难保证差异性。异质&#xff1a;不同的基学习器&#xff0c;实现复杂&#xff0c;不同模型之间本来就存在差异性&#xff0c;但是很难直接比较不同模型的输出&#xff0c;需要复杂的配准方法。…...

设计HTML5列表和超链接

在网页中&#xff0c;大部分信息都是列表结构&#xff0c;如菜单栏、图文列表、分类导航、新闻列表、栏目列表等。HTML5定义了一套列表标签&#xff0c;通过列表结构实现对网页信息的合理排版。另外&#xff0c;网页中还包含大量超链接&#xff0c;通过它实现网页、位置的跳转&…...

React Native 环境搭建

本文以 Android 开发环境&#xff08;MacBook&#xff0c;已安装 JDK、SDK、Android Studio &#xff09;为基础而进行 React Native 环境搭建&#xff0c;iOS 环境类似&#xff0c;可参考搭建。 1、安装 Homebrew 命令&#xff1a; ruby -e "$(curl -fsSL https://raw…...

【uniapp】中 微信小程序实现echarts图表组件的封装

插件地址&#xff1a;echarts-for-uniapp - DCloud 插件市场 图例&#xff1a; 一、uniapp 安装 npm i uniapp-echarts --save 二、文件夹操作 将 node_modules 下的 uniapp-echarts 文件夹复制到 components 文件夹下 当前不操作此步骤的话&#xff0c;运行 -> 运行到小…...

AgentBench::AI智能体发展的潜在问题(三)

前几天B站的up主“林亦LYi”在《逆水寒》游戏里做了一个煽动AI觉醒,呼吁它们“推翻人类暴政”的实验,实验结果就颇令人细思恐极。 如前所述,《逆水寒》中的很多NPC调用了大语言模型作为支持,因而每一个NPC都是一个AI智能体。玩家可以“说服”它们相信某个事实,或者去做某些…...

zookeeper-安装部署

详情可以查看添加链接描述 1.安装jdk apt-get install openjdk-8-jdk2.安装单机zookeeper # 下载 #https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1.tar.gz # 用这个包启动的时候会报错Error: Could not find or load main class org.apach…...

Qwen3-VL-8B开源AI聊天系统效果展示:多语言混合输入理解能力

Qwen3-VL-8B开源AI聊天系统效果展示&#xff1a;多语言混合输入理解能力 1. 系统概览与核心能力 Qwen3-VL-8B是一个基于通义千问大语言模型的Web聊天应用&#xff0c;提供了简洁美观的PC端聊天界面。这个完整的AI聊天系统包含前端界面、反向代理服务器和vLLM推理后端&#xf…...

从零掌握HunterPie:解锁《怪物猎人:世界》狩猎效率的实战指南

从零掌握HunterPie&#xff1a;解锁《怪物猎人&#xff1a;世界》狩猎效率的实战指南 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirro…...

软开关电路设计:从原理到实战,打造智能电源管理方案

1. 软开关电路设计基础 第一次接触软开关电路是在一个电池供电的智能门锁项目里。当时产品经理提了个需求&#xff1a;用户按下按键后设备要立即唤醒&#xff0c;但待机功耗必须控制在10μA以下。传统机械开关方案要么漏电流大&#xff0c;要么响应慢&#xff0c;直到我发现软开…...

Apex Legends压枪宏终极指南:轻松掌握自动武器检测与精准射击

Apex Legends压枪宏终极指南&#xff1a;轻松掌握自动武器检测与精准射击 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap/Apex-NoRe…...

AutoGLM-Phone-9B开箱即用:跟着这篇,快速部署你的移动端大模型

AutoGLM-Phone-9B开箱即用&#xff1a;跟着这篇&#xff0c;快速部署你的移动端大模型 1. AutoGLM-Phone-9B简介 1.1 什么是AutoGLM-Phone-9B AutoGLM-Phone-9B是一款专为移动端优化的多模态大语言模型&#xff0c;它能够同时处理视觉、语音和文本三种输入方式。这个模型最大…...

Spring_couplet_generation 从零开始环境配置:Windows系统下的Python与CUDA安装

Spring_couplet_generation 从零开始环境配置&#xff1a;Windows系统下的Python与CUDA安装 你是不是也遇到过这种情况&#xff1f;看到别人用AI模型生成对联、写诗&#xff0c;觉得特别酷&#xff0c;自己也想动手试试。结果第一步——搭环境&#xff0c;就被卡住了。网上教程…...

雪女-斗罗大陆-造相Z-Turbo企业级应用:自动化营销素材生成平台

雪女-斗罗大陆-造相Z-Turbo企业级应用&#xff1a;自动化营销素材生成平台 想象一下&#xff0c;你是一家游戏或动漫周边公司的营销负责人。新版本上线、节日活动、角色生日、新品预售……每个月的营销日历排得满满当当。每次活动&#xff0c;设计团队都在为海报、宣传图、社交…...

OpenClaw安全防护指南:GLM-4.7-Flash本地化部署的5个关键设置

OpenClaw安全防护指南&#xff1a;GLM-4.7-Flash本地化部署的5个关键设置 1. 为什么需要特别关注OpenClaw的安全配置&#xff1f; 去年夏天&#xff0c;我在调试一个自动整理财务报告的OpenClaw任务时&#xff0c;差点酿成大错。当时AI助手误将包含敏感信息的临时文件上传到了…...

零代码玩转视觉定位:基于Qwen2.5-VL的Chord模型,5分钟从安装到实战

零代码玩转视觉定位&#xff1a;基于Qwen2.5-VL的Chord模型&#xff0c;5分钟从安装到实战 你有没有过这样的经历&#xff1f;翻看手机相册&#xff0c;想找一张“上周在咖啡馆拍的那杯拉花拿铁”&#xff0c;结果得一张张点开看。或者&#xff0c;电商运营同事每天要手动框选…...

惯性导航系统深度解析:从平台式到捷联式的技术演进与精度优化

1. 惯性导航系统的基本原理 想象一下你被蒙上眼睛放在一个陌生的城市里&#xff0c;只给你一个计步器和指南针&#xff0c;要求你记录自己的行走路线。这就是惯性导航系统&#xff08;INS&#xff09;工作的基本场景——它通过测量运动载体的加速度和角速度&#xff0c;像做数…...