案例源码解读及思路: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编码的知识 关于 ...
随机推荐
- CentOS 7配置成网关服务器
其实在Linux下配置网关服务器很简单,如果配置好之后出现无法访问外网的情况,那么可以排查以下情况: 1.防火墙和iptables的服务关掉(firewalld.iptables) 2.清空iptab ...
- 在python里调用java的py4j的使用方法
py4j可以使python和java互调 py4j并不会开启jvm,需要先启动jvm server,然后再使用python的client去连接jvm GatewayServer实例:允许python程 ...
- 将 Smart 构件发布到 Maven 中央仓库
https://my.oschina.net/huangyong/blog/226738
- linux clamav 免费查毒工具
linux下需要杀毒工具吗?我一直认为是不要的,基于linux的病毒很少,linux 安全防护也做的很好,一般很难功破.我想那些黑客们更喜欢,写windows下的病毒,用的人多啊,传播也容易.下面的操 ...
- 第二天学习笔记:(MDN HTML学习、web安全策略与常见攻击、语义化)
一:Web入门 1:web文件命名 在文件名中应使用连字符(-).搜索引擎把连字符当作一个词的分隔符, 但不会以这种方式处理下划线. 养成在文件夹和文件名中使用小写,并且使用短横线而不是空格来分隔的习 ...
- git ssh 22 端口不可用时通过https 443 端口配置git ssh
Using SSH over the HTTPS port Sometimes, firewalls refuse to allow SSH connections entirely. If usin ...
- Java里进制转换(二进制、八进制、十进制、十六进制)
// 十进制转其它进制(二进制,八进制,十六进制) int k = 17; System.out.println(Integer.toBinaryString(k));// 转二进制 System.o ...
- MySql基本查询、连接查询、子查询、正则表达查询解说
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 查询数据指从数据库中获取所须要的数据.查询数据是数据库操作中最经常使用,也是最重要的操作.用户 ...
- matplotlib绘图不显示问题解决plt.show()
最近在看<Python数据分析>这本书,而自己写代码一直用的是Pycharm,在练习的时候就碰到了plot()绘图不能显示出来的问题.网上翻了一下找到知乎上一篇回答,试了一下好像不行,而且 ...
- create-react-app入门教程
Create React App是FaceBook的React团队官方出的一个构建React单页面应用的脚手架工具.它本身集成了Webpack,并配置了一系列内置的loader和默认的npm的脚本,可 ...