摘要
以前看过的关于RabbitMQ核心消息模式的文章都是基于JavaAPI的,最近看了下官方文档,发现这些核心消息模式都可以通过Spring AMQP来实现。于是总结了下RabbitMQ的实用技巧,包括RabbitMQ在Windows和Linux下的安装、5种核心消息模式的Spring AMQP实现,相信对于想要学习和回顾RabbitMQ的朋友都会有所帮助。
简介
RabbitMQ是最受欢迎的开源消息中间件之一,在全球范围内被广泛应用。RabbitMQ是轻量级且易于部署的,能支持多种消息协议。RabbitMQ可以部署在分布式系统中,以满足大规模、高可用的要求。
相关概念
我们先来了解下RabbitMQ中的相关概念,这里以5种消息模式中的路由模式为例。
![948e540302ee5b62ff9e29cd40bb474f.jpeg](https://i-blog.csdnimg.cn/blog_migrate/abb8e46c4b3a3e2082892837e16cb2ec.jpeg)
![79b654ec0b98275f130724fc1b4c6656.jpeg](https://i-blog.csdnimg.cn/blog_migrate/fbb6a56cd626b020d763d12f89c4b917.jpeg)
安装及配置
接下来我们介绍下RabbitMQ的安装和配置,提供Windows和Linux两种安装方式。
Windows下的安装
- 安装Erlang,下载地址:http://erlang.org/download/ot...
![67b87b847031d7e84f163717835a9e19.jpeg](https://i-blog.csdnimg.cn/blog_migrate/dd66f9fd16099230701c96588b069a63.jpeg)
- 安装RabbitMQ,下载地址:https://dl.bintray.com/rabbit...
![4e3fb0bef323a2da0dd80edcddbb9bc3.jpeg](https://i-blog.csdnimg.cn/blog_migrate/f230319f1a32a7c4212ba3e440bd52e9.jpeg)
- 安装完成后,进入RabbitMQ安装目录下的sbin目录;
![3c7ad6d9e392d0fc4e1197d07f14522e.jpeg](https://i-blog.csdnimg.cn/blog_migrate/d84f4b2b1515300fffde650f0224b4eb.jpeg)
- 在地址栏输入cmd并回车启动命令行,然后输入以下命令启动管理功能。
![c20a414d13830338fbf2ac803f363f58.jpeg](https://i-blog.csdnimg.cn/blog_migrate/579add2ea7fc6a37141be6b232447886.jpeg)
Linux下的安装
- 下载rabbitmq 3.7.15的Docker镜像;
- 使用Docker命令启动服务;
- 进入容器并开启管理功能;
rabbitmq-plugins enable rabbitmq_management
![017bba377092d804ee9e46c5e41160ac.jpeg](https://i-blog.csdnimg.cn/blog_migrate/bd624f18e16733d74e70de57182eb35e.jpeg)
- 开启防火墙便于外网访问。
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload
访问及配置
- 访问RabbitMQ管理页面地址,查看是否安装成功(Linux下使用服务器IP访问即可):http://localhost:15672/
![4bf90cc9d36484d710d5a23ce3221879.jpeg](https://i-blog.csdnimg.cn/blog_migrate/cf60efc7be9e051f657e7319a63acf57.jpeg)
- 输入账号密码并登录,这里使用默认账号密码登录:guest guest
- 创建帐号并设置其角色为管理员:mall mall
![3da0879937bf9907d579bc59bfef24ff.jpeg](https://i-blog.csdnimg.cn/blog_migrate/c06adcaa138e6f98593ed33efa462164.jpeg)
- 创建一个新的虚拟host为:/mall
![5b31ac7b02d8bc04d0eae3e2c1e34881.jpeg](https://i-blog.csdnimg.cn/blog_migrate/ab101c52ee733e6ac48541d90a17d6f9.jpeg)
- 点击mall用户进入用户配置页面;
![ea9f39cf76c887eb01fc279b616aa266.jpeg](https://i-blog.csdnimg.cn/blog_migrate/29d5aae83a4e613dd43f3e54f639e562.jpeg)
- 给mall用户配置该虚拟host的权限;
![4f85745b2102575f73a710b33bdfa5ac.jpeg](https://i-blog.csdnimg.cn/blog_migrate/8c880e9f0668ca47167b40fa537eebdc.jpeg)
- 至此,RabbitMQ的配置完成。
5种消息模式
这5种消息模式是构建基于RabbitMQ的消息应用的基础,一定要牢牢掌握它们。学过RabbitMQ的朋友应该了解过这些消息模式的Java实现,这里我们使用Spring AMQP的形式来实现它们。
简单模式
简单模式是最简单的消息模式,它包含一个生产者、一个消费者和一个队列。生产者向队列里发送消息,消费者从队列中获取消息并消费。
模式示意图
![d5da031c23c37829d749e32879f5e85f.jpeg](https://i-blog.csdnimg.cn/blog_migrate/8bee3f65db314e6edaa333be3624e841.jpeg)
Spring AMQP实现
- 首先需要在pom.xml中添加Spring AMQP的相关依赖;
- 然后修改application.yml,添加RabbitMQ的相关配置;
- 添加简单模式相关Java配置,创建一个名为simple.hello的队列、一个生产者和一个消费者;
- 生产者通过send方法向队列simple.hello中发送消息;
消费者从队列simple.hello中获取消息;
- 在controller中添加测试接口,调用该接口开始发送消息;
运行后结果如下,可以发现生产者往队列中发送消息,消费者从队列中获取消息并消费。
![57cc9d0c57169e0db96f098010dafeec.jpeg](https://i-blog.csdnimg.cn/blog_migrate/db1d52fdf3092278f9755f131c730503.jpeg)
![f7d32b4fd21073c592568a61290ae042.jpeg](https://i-blog.csdnimg.cn/blog_migrate/8b9f19e70e781f6a670f74557af45ce6.jpeg)
工作模式
工作模式是指向多个互相竞争的消费者发送消息的模式,它包含一个生产者、两个消费者和一个队列。两个消费者同时绑定到一个队列上去,当消费者获取消息处理耗时任务时,空闲的消费者从队列中获取并消费消息。
模式示意图
![4d7747f715a91d8da2d20ab955707df0.jpeg](https://i-blog.csdnimg.cn/blog_migrate/6afec376806c56314e7cf2916eff638a.jpeg)
Spring AMQP实现
- 添加工作模式相关Java配置,创建一个名为work.hello的队列、一个生产者和两个消费者;
生产者通过send方法向队列work.hello中发送消息,消息中包含一定数量的.号;
两个消费者从队列work.hello中获取消息,名称分别为instance 1和instance 2,消息中包含.号越多,耗时越长;
在controller中添加测试接口,调用该接口开始发送消息;
运行后结果如下,可以发现生产者往队列中发送包含不同数量.号的消息,instance 1和instance 2消费者互相竞争,分别消费了一部分消息。
![49f8a9be2de9e4dd2e0ced7da637fde3.jpeg](https://i-blog.csdnimg.cn/blog_migrate/c0d553c7b3fa4b9cf241552d7361632c.jpeg)
![4fc2b187aca0f3665c6ca36ff3dc50d3.jpeg](https://i-blog.csdnimg.cn/blog_migrate/258aebdbe483cff50b84dc6da4196fbb.jpeg)
![767319ff4ded9fdc1d4cb2a2c474b852.jpeg](https://i-blog.csdnimg.cn/blog_migrate/d2469d89d314d8f2b4611dd4d9ac1183.jpeg)
发布/订阅模式
发布/订阅模式是指同时向多个消费者发送消息的模式(类似广播的形式),它包含一个生产者、两个消费者、两个队列和一个交换机。两个消费者同时绑定到不同的队列上去,两个队列绑定到交换机上去,生产者通过发送消息到交换机,所有消费者接收并消费消息。