SpringBoot+RabbitMQ(官方案例)

news2024/11/17 7:56:26
  1. 在线文档
  2. 项目结构
    1.源码克隆:git clone https://github.com/spring-guides/gs-messaging-rabbitmq.git
    2.包含两个项目initial和complete,initial可以根据文档练习完善,complete是完整项目
    3.功能描述:构建应用程序,SpringBoot 与 RabbitMQ 服务器交互,实现消息的订阅与发布
    4.RabbitMQ:https://blog.csdn.net/tongxin_tongmeng/article/details/128418388

  3. 源码分析

    1.POM依赖
    <dependencies>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-amqp</artifactId>
    	</dependency>
    	<!--https://blog.csdn.net/tongxin_tongmeng/article/details/128399703-->
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-test</artifactId>
    		<scope>test</scope>
    	</dependency>
    	<dependency>
    		<groupId>org.springframework.amqp</groupId>
    		<artifactId>spring-rabbit-test</artifactId>
    		<scope>test</scope>
    	</dependency>
    </dependencies>
    2.入口类
    // https://blog.csdn.net/tongxin_tongmeng/article/details/128401278
    @SpringBootApplication
    public class MessagingRabbitmqApplication {
    
    	static final String topicExchangeName = "spring-boot-exchange";
    
    	static final String queueName = "spring-boot";
    
    	@Bean
    	Queue queue() {
    		return new Queue(queueName, false);
    	}
    
    	@Bean
    	TopicExchange exchange() {
    		return new TopicExchange(topicExchangeName);
    	}
    
    	@Bean
    	Binding binding(Queue queue, TopicExchange exchange) {
    		return BindingBuilder.bind(queue).to(exchange).with("foo.bar.#");
    	}
    
    	@Bean
    	SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
    			MessageListenerAdapter listenerAdapter) {
    		SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    		container.setConnectionFactory(connectionFactory);
    		container.setQueueNames(queueName);
    		container.setMessageListener(listenerAdapter);
    		return container;
    	}
    
    	@Bean
    	MessageListenerAdapter listenerAdapter(Receiver receiver) {
    		return new MessageListenerAdapter(receiver, "receiveMessage");
    	}
    
    	public static void main(String[] args) throws InterruptedException {
    		SpringApplication.run(MessagingRabbitmqApplication.class, args).close();
    	}
    
    }
    3.发送消息
    @Component
    public class Runner implements CommandLineRunner {
    
    	private final RabbitTemplate rabbitTemplate;
    	private final Receiver receiver;
    
    	public Runner(Receiver receiver, RabbitTemplate rabbitTemplate) {
    		this.receiver = receiver;
    		this.rabbitTemplate = rabbitTemplate;
    	}
    
    	@Override
    	public void run(String... args) throws Exception {
    		System.out.println("Sending message...");
    		rabbitTemplate.convertAndSend(MessagingRabbitmqApplication.topicExchangeName, "foo.bar.baz", "Hello from RabbitMQ!");
    		receiver.getLatch().await(10000, TimeUnit.MILLISECONDS);
    	}
    
    }
    4.接收消息
    @Component
    public class Receiver {
    
    	private CountDownLatch latch = new CountDownLatch(1);
    
    	public void receiveMessage(String message) {
    		System.out.println("Received <" + message + ">");
    		latch.countDown();
    	}
    
    	public CountDownLatch getLatch() {
    		return latch;
    	}
    
    }
  4. 项目演示

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

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

相关文章

inventor(2):设置单位,显示完整工具区/功能区,创建分割面

好久没用inventor了&#xff0c;记录一些重新学习的基本操作 文章目录1. inventor设置单位为cm2. inventor显示完整工具区/功能区3. inventor创建分割面1. inventor设置单位为cm inventor默认单位为in(英尺)&#xff0c;国内常用习惯为cm 一次点击&#xff1a;工具–选项–文档…

这篇文章会让你熟悉文件的各种操作,让你对文件的认识更加深入【c语言】

文章目录为什么使用文件什么是文件文件名文件的打开和关闭文件指针文件的顺序读写fgetcfputcfgetsfprintffscanffwritefread对比一组函数sprintfsscanf文件的随机读写fseekftellrewind文本文件和二进制文件文件读取结束的判定文件缓冲区为什么使用文件 把数据存放在磁盘文件、存…

2022 SuperMap开发者大会全议程公布,16个专场快来pick

2022年10月12日-14日&#xff0c;2022 SuperMap开发者大会(2022 SuperMap Developer Conference,简称“SDC 2022”)将在线举办。3天时间&#xff0c;16场专题论坛&#xff0c;聚焦GIS前沿技术和热点应用领域开发&#xff0c;分享50场开发实战报告&#xff0c;面向不同应用场景&…

基于小程序语法的跨端开发平台大盘点

2022年12月18日&#xff0c;微信推出了“Donut”开发平台&#xff0c;目前已经开始限时免费公测。这款跨端开发平台与Flutter、React Native、Taro等跨端框架最大的不同是&#xff1a;跨端的能力是基于小程序原生语法进行转译。这背后不得不让人联想到此次开发平台的推出&#…

P1046 [NOIP2005 普及组] 陶陶摘苹果————C++

文章目录题目[NOIP2005 普及组] 陶陶摘苹果题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解题思路Code运行结果题目 [NOIP2005 普及组] 陶陶摘苹果 题目描述 陶陶家的院子里有一棵苹果树&#xff0c;每到秋天树上就会结出 101010 个苹果。苹果成熟的时候&…

实验十一、多级放大电路的参数设置

一、题目 利用 Multism 为图1所示电路选择电路参数&#xff0c;使之正常工作&#xff0c;并测试 QQQ 点、电压放大倍数和输入电阻。 图1多级放大电路图1\,多级放大电路图1多级放大电路 二、仿真电路 在Multism环境下搭建图1所示电路&#xff0c;选择电路参数&#xff0c;如图…

【谷粒商城基础篇】商品服务开发:基础概念、三级分类

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

再快一点?动态内容如何加速

未来已来&#xff0c;只是不均衡地分布在当下 大家好&#xff0c;我是菜农&#xff0c;欢迎来到我的频道。 近年来 Web 3 的概念在程序员的小圈子也几乎是人尽皆知了。功能再强&#xff0c;噱头再足&#xff0c;但是如果访问速度没有跟上&#xff0c;一起都是浮云。哪怕拿现在…

封装和解封装、跨层封装

封装和解封装 我们一般把数据从应用层开始到数据链路层的加工过程称为封装&#xff0c;反过程称为解封装 封装 — 将每一层最重要的数据添加到原始数据当中&#xff0c;来实现这一层的功能。 应用层 — 应用需要进行封装&#xff0c;但是&#xff0c;封装方式取决于不同的应用…

hiveSql 京东面试题-有效值问题

hiveSql 京东面试题-有效值问题需求准备数据分析实现最后需求 有入库成本表&#xff0c;一个商品每次入库就会产生一条数据&#xff0c;里面包含商品id&#xff0c;入库时间time&#xff0c;以及入库采购的成本。但由于某些某些原因&#xff0c;导致表中某些数据的成本是有丢失…

MySQL-慢sql优化思路

目录 1、开启Mysql慢查询 1.1、查看慢查询相关配置 1.2、查询慢查询sql耗时临界点 1.3、开启Mysql慢查询 2、explain查看SQL执行计划 2.1、Select_type 2.2、Type 2.3、Possible_keys 2.4、Key 2.5、Key_len 2.6、Rows 2.7、Extra 3、profile 分析执行耗时 3.1、…

gin web开发模板渲染

一、模板输出模板输出首先需要指定模板所放位置 r.LoadHTMLGlob("templates/**/*")参数中&#xff1a; **代表匹配任意名称的目录 *代表匹配任意名称的模板文件"templates/**/*" 代表可以匹配指定模板文件到 templates目录下的 hello/index.tmpl user/inde…

自然语言处理 第八章 机器翻译复习

机器翻译机器翻译概述典型神经机器翻译模型神经机器翻译 ( Neural Machine Translation, NMT神经机器翻译系统相关技术罕见词处理技术&#xff08;词表受限问题&#xff09;解决办法subword 方法beam searchcoverage penalty &#xff08;翻译覆盖率问题&#xff09;推敲网络&a…

qt运行外部exe并自定义外部功能界面(QWidget添加工具栏QToolBar)

先放效果图&#xff0c;就是在qt运行的界面中&#xff0c;不只是运行出了外部exe的界面&#xff0c;还可以在外围放置自定义的功能按钮。&#xff08;本质就是在QWidget中添加工具栏QToolBar&#xff09; 关于如何只运行出外部的exe&#xff0c;我之前写过教程&#xff1a;ht…

序列生成策略——束搜索、贪心搜索、穷举搜索

序列搜索策略包括贪心搜索、穷举搜索和束搜索。 贪心搜索所选取序列的计算量最小&#xff0c;但精度相对较低。 穷举搜索所选取序列的精度最高&#xff0c;但计算量最大。 束搜索通过灵活选择束宽&#xff0c;在正确率和计算代价之间进行权衡。 在序列到序列学习&#xff08…

Java集合面试题汇总大全

每个集合的出现一定是为了解决某种问题的解决方案。 集合流程图 JAVA中集合和数组的区别Collection和Collections的区别ArrayList和LinkedList 和Vector的区别list/set/map的区别HashSet和TreeSet和LinkedHashSet区别HashMap和Hashtable的比较HashMap和ConcurrentHashMap区别H…

【零基础】学python数据结构与算法笔记5

文章目录前言30.归并排序归并31.归并排序实现32.归并排序时间复杂度讨论33.NB三人组小结总结前言 学习python数据结构与算法&#xff0c;学习常用的算法&#xff0c; b站学习链接 30.归并排序归并 将两个箭头指向两个列表的首个元素&#xff0c;比较&#xff0c;哪个大就把它…

Java IO流 - 字符流的使用详细介绍

文章目录字符流的使用文件字符输入流创建字符输入流字符输入流读取文件字符输出流创建字符输出流字符输出流写入字符流的使用 字节流读取中文输出会存在什么问题&#xff1f; 会乱码。或者内存溢出。 读取中文输出&#xff0c;哪个流更合适&#xff0c;为什么&#xff1f; 字符…

MAX78000训练自己的神经网络模型

参考&#xff1a; The MAX78000 Microcontroller, Some Coffee, and Artificial Intelligence GitHub - MaximIntegratedAI/ai8x-training: Model Training for ADIs MAX78000 and MAX78002 AI Devices ai8x-synthesis/WSL2.md at develop MaximIntegratedAI/ai8x-synthesi…

移动金融管理系统设计与开发实训(课程设计报告)——基于Android+Django的银行系统部分功能设计与实现

阅读过程中若有不解和需要可私信&#xff0c;乐于解答 项目代码文档都保存着 基于AndroidDjango的银行系统部分功能开发与设计 摘要&#xff1a; 随着信息技术的快速发展以及经济的快速发展&#xff0c;金融界的信息化的进程也在不断推进&#xff0c;信息技术的不断成熟和人…