SpringBoot RabbitMQ 整合使用

栏目: Java · 发布时间: 8年前

内容简介:SpringBoot RabbitMQ 整合使用

SpringBoot RabbitMQ 整合使用

前提

上次写了篇文章, 《SpringBoot Kafka 整合使用》 ,阅读量还挺高的,于是想想还是把其他几种 MQ 也和 SpringBoot 整合使用下。

下面是四种比较流行的 MQ :

SpringBoot RabbitMQ 整合使用

后面都写写和 SpringBoot 整合的文章。

安装 RabbitMQ

由于换 Mac 了,所以一些环境就直接在 Mac 搞,但是像安装 RabbitMQ 这些又会把自己电脑系统给搞的太乱,所以能在 Docker 里面安装就安装在 Docker,这次 RabbitMQ 我也直接在 Docker 里安装。

启动 Docker for Mac,如果没安装过的请看我上一篇文章: http://www.54tianzhisheng.cn/2018/01/25/Docker-install/

当然你也可以在自己的 Linux 服务器或者虚拟机里启动安装 RabbitMQ 。

Docker 安装的话很简单,因为 RabbitMQ 官方已经提供了自己的 Docker 容器,只需要一行命令:(可右移查看完整代码)

该镜像拥有一个基于 web 的控制台和 Http API。Http API 可以在地址看到如何使用: http://localhost:15672/api/

讲解下上面命令行:

  • 15672 :表示 RabbitMQ 控制台端口号,可以在浏览器中通过控制台来执行 RabbitMQ 的相关操作。

  • 5672 : 表示 RabbitMQ 所监听的 TCP 端口号,应用程序可通过该端口与 RabbitMQ 建立 TCP 连接,并完成后续的异步消息通信

  • RABBITMQDEFAULTUSER:用于设置登陆控制台的用户名,这里我设置 admin

  • RABBITMQDEFAULTPASS:用于设置登陆控制台的密码,这里我设置 admin

容器启动成功后,可以在浏览器输入地址: http://localhost:15672/ 访问控制台

SpringBoot RabbitMQ 整合使用

登陆后:

SpringBoot RabbitMQ 整合使用

简单描述下上图中中控制台的列表的作用:

  • Overview :用于查看 RabbitMQ 的一些基本信息(消息队列、消息发送速率、节点、端口和上下文信息等)

  • Connections:用于查看 RabbitMQ 客户端的连接信息

  • Channels:用户查看 RabbitMQ 的通道信息

  • Exchange:用于查看 RabbitMQ 交换机

  • Queues:用于查看 RabbitMQ 的队列

  • Admin:用于管理用户,可增加用户

创建项目

在 IDEA 中创建一个 SpringBoot 项目结构:

SpringBoot RabbitMQ 整合使用

SpringBoot 框架中已经内置了对 RabbitMQ 的支持,如果你看过官方文档的话,就可以看到的,我们需要把依赖 spring-boot-starter-amqp 引入就行。

1、 pom.xml 引入依赖后如下:

2、 application.properties 配置修改如下:

3、 消息发送类 RabbitMQClient.java

就这样,发送消息代码就实现了。

这里关键的代码为 rabbitTemplate.convertAndSend() 方法, zhisheng 这个是路由规则(routingKey),它的值表明将消息发送到指定的队列 zhisheng 中去,这里跟了下源码,发现 convertAndSend() 方法最后调用的方法其实是一个 doSend() 方法。

SpringBoot RabbitMQ 整合使用

4、消息接收类

你看,这里就有个 RabbitListener 一直在监听着队列 zhisheng 。

当然这个队列是必须要我们自己在应用程序中创建好,它不会像我之前写的文章 《SpringBoot Kafka 整合使用》 中的 Kafka 一样,Kafka 它会在用到队列的时候动态的创建,不需要我们提前创建好。

那么在 RabbitMQ 中该如何创建队列呢?

SpringBoot RabbitMQ 整合使用

如上图所示:这样我们就创建好了一个 zhisheng 的队列,当程序开始运行时,消息接收类会持续监听队列 zhisheng 中即将到来的消息。

5、运行项目

需要在启动类中注入发送消息的类,并且提供 init 方法,在 init 方法中调用发送消息类的 send() 方法

需要注意的是:init() 方法带有 @PostConstruct 注解,被 @PostConstruct 修饰的方法会在构造函数之后执行。

启动项目就可以发现控制台已经接收到消息了。

SpringBoot RabbitMQ 整合使用

6、单线程测试性能

看到上面图片中注释掉的代码没?那就是用来测试消息发送的性能的,我发送 10000 条消息看看总共耗时多少。

SpringBoot RabbitMQ 整合使用

10000 条消息发送耗时:215ms。 这是在单线程下,下次可以和其他的 MQ 测试对比下,并且也可以在多线程的环境下测试性能。

同时从控制台可以看到发送的速率:

SpringBoot RabbitMQ 整合使用

7、多线程测试性能

开了10 个线程,每个线程发送 10000 条消息。

init 方法代码如下:

耗时:4063ms

控制台显示如下图:

SpringBoot RabbitMQ 整合使用

8、注意

这里测试发送的消息直接是 String 类型的,你也可以测试下 Bean 类,这需要注意需要序列化。

关注我

SpringBoot RabbitMQ 整合使用

最后

转载请务必注明原创地址为: http://www.54tianzhisheng.cn/2018/01/26/SpringBoot-RabbitMQ/


以上所述就是小编给大家介绍的《SpringBoot RabbitMQ 整合使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

产品经理的20堂必修课

产品经理的20堂必修课

徐建极 / 人民邮电出版社 / 2013-9-1 / 59.00元

《产品经理的20堂必修课》以作者八年的产品经理工作实践为基础,通过系统的理论结合丰富的实例的方法,全面地总结了作为一名互联网产品经理所应掌握的知识。 《产品经理的20堂必修课》分为三大部分。 讲产品:深入剖析互联网产品成功的要素,分别从需求导向、简单原则、产品运营、战略布局等维度,分析如何让产品在残酷的互联网竞争中脱颖而出。 讲方法:着重分析优秀的产品团队运作的工作方法和程序,详......一起来看看 《产品经理的20堂必修课》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试