案例源码解读及思路:RabbitMQ在springboot中的配置
消息队列主要在于异步和服务解耦,一般在大型IT应用广泛。比如我在开发实践中,A服务调用了发送邮件和espace消息的服务B,使用异步线程,基于HTTP请求。这个功能符合消息队列的使用场景。但是由于使用该场景小,使用消息队列有学习成本,故没有使用,从侧面说明了消息队列使用的广泛性。
如果两个服务能通信(消息),那么也可以实现RPC,比如发邮件,espace这个过程,只不过做成一般的rpc需要一些封装。那么现在来学习一下高性能的,流行的RabbitMQ。其使用Erlang语言编写,并发性能好,使用AMQP协议,支持跨语言。但是安装RabbitMQ需要安装Erlang,并邦本要兼容。
ActiveMQ比较轻量级,文档支持也好。
在消息中间件中,消费者怎么消费消息是重点,通常做法是定义消息监听器。activemq提供了3种消息监听器,MessageListener, SessionAwareMessageListener, MessageListenerAdapter. 后面两种消息监听器都是需要收到消息后需要确认或者回复时使用的(双向消息)。
程序员的高级之处不是什么都会,而是对自己不会的进行抽象,然后完成自己的工作。比如对于RabbitMQ,按照字面理解,就将其看成Message Queue,也就是用来容纳对象的集合。很多功能都拆分给一个专一的模块,然后使用tcp/ip通信,使用端口号,最熟悉的就是mysql等数据库产品。回归正题,spring中怎么配置RabbitMQ的参数呢?看源码:
@ConfigurationProperties(prefix = "spring.rabbitmq")
public class RabbitProperties {
/**
* RabbitMQ host.
*/
private String host = "localhost";
/**
* RabbitMQ port.
*/
private int port = 5672;
/**
* Login user to authenticate to the broker.
*/
private String username = "guest";
这和数据库的配置美什么大的区别,以spring.rabbitmq开头,将配置信息封装成一个对象,然后就可以使用这个对象了,那么问题来了@ConfigurationProperties这个注解是什么呢?它的作用已经很明显了,就是从properties文件提取以spring.rabbitmq开头的字符串。
@Configuration
@ConditionalOnClass({ RabbitTemplate.class, Channel.class })
@EnableConfigurationProperties(RabbitProperties.class)
@Import(RabbitAnnotationDrivenConfiguration.class)
public class RabbitAutoConfiguration { // 这是RabbitAutoConfiguration的注解,基本思路就是如果有Rabbitmq,spring会去加载这个bean,
而RabbitAutoConfiguration告诉spring具体怎么加载
参考博文:https://sixdegree.github.io/2019/01/05/Rabbitmq.html
acivemq博文:https://www.cnblogs.com/liuyuan1227/p/10771460.html
案例源码解读及思路:RabbitMQ在springboot中的配置的更多相关文章
- SpringMVC源码解读 - HandlerMapping
SpringMVC在请求到handler处理器的分发这步是通过HandlerMapping模块解决的.handlerMapping 还处理拦截器. 先看看HandlerMapping的继承树吧 可以大 ...
- go 中 sort 如何排序,源码解读
sort 包源码解读 前言 如何使用 基本数据类型切片的排序 自定义 Less 排序比较器 自定义数据结构的排序 分析下源码 不稳定排序 稳定排序 查找 Interface 总结 参考 sort 包源 ...
- Jfinal启动源码解读
本文对Jfinal的启动源码做解释说明. PS:Jfinal启动容器可基于Tomcat/Jetty等web容器启动,本文基于Jetty的启动方式做启动源码的解读和分析,tomcat类似. 入口 JF ...
- 前端日报-20160527 underscore 源码解读
underscore 源码解读 API文档浏览器 JavaScript 中加号操作符细节 抛弃 jQuery,拥抱原生 JS 从 0 开始学习 GitHub 系列之「加入 GitHub」 js实现克隆 ...
- JFinal的启动源码解读
本文对Jfinal的启动源码做解释说明. PS:Jfinal启动容器可基于Tomcat/Jetty等web容器启动,本文基于Jetty的启动方式做启动源码的解读和分析,tomcat类似. 入口 JF ...
- Webpack探索【15】--- 基础构建原理详解(模块如何被组建&如何加载)&源码解读
本文主要说明Webpack模块构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack的基础构建原理. 本文使用的W ...
- JVM 源码解读之 CMS 何时会进行 Full GC
t点击上方"涤生的博客",关注我 转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注. 前言 本文内容是基于 JDK 8 在文章 JVM 源码解读之 CMS GC 触 ...
- Vue 源码解读(11)—— render helper
前言 上一篇文章 Vue 源码解读(10)-- 编译器 之 生成渲染函数 最后讲到组件更新时,需要先执行编译器生成的渲染函数得到组件的 vnode. 渲染函数之所以能生成 vnode 是通过其中的 _ ...
- AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization
这篇就讲到了跟请求相关的类了 关于AFNetworking 3.0 源码解读 的文章篇幅都会很长,因为不仅仅要把代码进行详细的的解释,还会大概讲解和代码相关的知识点. 上半篇: URI编码的知识 关于 ...
随机推荐
- Hibernate(1)基本知识
hibernate初步 1.概述 ①hibernate是java应用和关系数据库之间的桥梁,是一个开源的对象关系映射框架,可用来把对象模型表示的java对象 映射到关系型数据库表中去. ②hibern ...
- CentOS 7配置成网关服务器
其实在Linux下配置网关服务器很简单,如果配置好之后出现无法访问外网的情况,那么可以排查以下情况: 1.防火墙和iptables的服务关掉(firewalld.iptables) 2.清空iptab ...
- Creating a NuGet Package in 7 easy steps - Plus using NuGet to integrate ASP.NET MVC 3 into existing Web Forms applications
UPDATE: Check out my follow up post where I remove the need for editing the Global.asax.cs and show ...
- Asp.Net Core获取请求上下文HttpContext
注:特别说明当前版本对应.Net Core2.1意义上框架 一.注入HttpContextAccessor ASP.NET Core中提供了一个IHttpContextAccessor接口,HttpC ...
- iOS:检测多媒体(相机、相册、麦克风)设备权限,弹框提示
一.感言 新年伊始,万象更新,一转眼,就2019年了. 作为一个科班生,从事移动端开发好几年了,回顾曾经的摸爬滚打,兢兢业业,严格的来说,多少算是入行了. 过去成绩如何暂且不说,新的一年,我当加倍努力 ...
- 超过 130 个你需要了解的 vim 命令
从 1970 年开始,vi 和 vim 就成为了程序员最喜爱的文本编辑器之一.5年前,我写了一个问自己名为 “每个程序员都应该知道的 100 个 vim 命令” 这次算是之前那篇文章的改进版,希望你会 ...
- Geek/Git中文怎么读
Geek怎么读 英[gi:k] = gay客 = 给客 Git怎么读 英[gɪt] = gay 特 = 给特 Flux怎么读 英[flʌks] = 佛拉克斯 Redux怎么读 英[ri:'dʌks] ...
- [canvas]空战游戏1.18
空战游戏到今天可以玩了,玩法还是方向键(或AWSD)控制飞机位置,空格键开炮,吃五星升级,被敌机打中降级直到击落,与敌机相撞则GG. 点此下载程序1.16版,用CHrome打开index.html试玩 ...
- Deep Learning.ai学习笔记_第一门课_神经网络和深度学习
目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...
- 如何对正在运行的进程,进行heap profile
简单来说, 就是先preload上tcmalloc, 日常用用没啥问题, 当感觉出现问题时, gdb attach 上, 然后执行 call HeapProfilerStart("xxx&q ...