目录
1、RabbitMQ和Erlang下载(windows)
1.1Erlang安装
1.2RabbitMQ安装
1.3安装管理工具RabbitMQ-Plugins
2、MQ的基本概念
2.1MQ概述
2.2MQ优势和劣势
2.3常见的mq产品
2.4RabbitMQ简介
2.5JMS
3、RabbitMQ快速入门
3.1入门程序
4、RabbitMQ的工作模式
4.1Work queues工作队列模式
4.2Pub/Sub订阅模式
4.3Routing路由模式
4.4Topics通配符模式
4.5工作模式总结
5、Spring整合RabbitMQ
6、SpringBoot整合RabbitMQ
1、RabbitMQ和Erlang下载(windows)
- 安装RabbitMQ之前必须先安装Erlang环境
- 安装前先参照rabbitmq官网给的RabbitMQ和Erlang版本对应关系下载对应版本的软件
RabbitMQ官网下载址:Installing on Windows — RabbitMQ
Erlang官网下载地址:Downloads - Erlang/OTP
1.1Erlang安装
点击下载好的.exe文件进行傻瓜式安装(一直next)即可
配置Erlang环境变量
打开命令窗口,输入erl验证环境是否配置成功(出现以下版本号即bingo,显示不是内部命令则环境变量配置成功)
1.2RabbitMQ安装
和安装Erlang一样,点击exe文件进行安装配置环境变量
1.3安装管理工具RabbitMQ-Plugins
进入sbin文件下,打开命令窗口输入
rabbitmq-plugins enable rabbitmq_management
如果不是显示上图中的信息而是出现以下表示错误
Please either set ERLANG_HOME to point to your Erlang installation or place the RabbitMQ server distribution in the Erlang lib folder
只要之前步骤都成功了,重启电脑,重新输入命令rabbitmq-plugins enable rabbitmq_management安装即可
安装好管理工具后输入rabbitmq-server.bat启动rabbitMQ
最后输入http://localhost:15672(默认账号:guest,密码:guest)就能进入RabbitMQ管理界面
2、MQ的基本概念
2.1MQ概述
- MQ,消息队列,存储消息的中间件
- 分布式系统通信两种方式:直接远程调用和借助第三方完成间接通信
- 发送方称为生产者,接收方称为消费者
2.2MQ优势和劣势
- MQ,消息队列,存储消息的中间件
- 分布式系统通信两种方式:直接远程调用和借助第三方完成间接通信
- 发送方称为生产者,接收方称为消费者
2.2MQ优势和劣势
2.3常见的mq产品
2.4RabbitMQ简介
AMQP,即Advanced Message Queuing Protocal(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP规范发布。类比HTTP。
2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ1.0发布。RabbitMQ采用Erlang语言开发。Erlang语言由Ericson设计,专门为开发高并发和分布式系统的一种语言,在电脑领域使用广泛。
RabbitMQ基础架构如下图:
2.5JMS
- JMS即JAVA消费服务(JavaMwssage Service)应用程序接口,是一个java平台中关于面向消息中间件的API
- JMS是JAVAEE规范中的一种,类比JDBC
- 很多消息中间件都实现了JMS规范,例如:ActiveMQ。RabbitMQ官方没有提供JMS的实现包,但是开源社区有
小结:
- RabbitMQ是基于AMQP协议使用Erlang语言开发的一款消息队列产品。
- RabbitMQ提供了6种工作模式,我们学习5种。
- AMQP是协议,类比HTTP。
- JMS是API规范接口,类比JDBC。
3、RabbitMQ快速入门
3.1入门程序
需求:使用简单模式完成消息传递
步骤:
- 创建工程(生成者、消费者)
- 分别添加依赖
- 编写生产者发送消息
- 编写消费者消费消息
添加依赖:
生产者发送消息:
消费者消费消息:
4、RabbitMQ的工作模式
4.1Work queues工作队列模式
- Work Queues:与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。
- 应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。
小结:
- 在一个队列中如果有多个消费者,那么消费者之间对于同一个消息的关系是竞争的关系。
- Work Queues对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。例如:短信服务部署多个,只需要有一个节点成功发送即可。
4.2Pub/Sub订阅模式
在订阅模型中,多了一个Exchange角色,而且过程略有变化;
- P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发送给X(交换机)
- C:消费者,消息的接收者,会一直等待消息到来
- Queue:消息队列 ,接收消息,缓存消息
- Exchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型
1、Fanout:广播,将消息交给所有绑定到交换机的队列
2、Direct:定向,把消息交给符合指定routing key 的队列
3、Topic:通配符,把消息交给符合routing pattern(路由模式)的队列
Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失
Fanout生产者代码:
Fanout消费者代码:
4.3Routing路由模式
1、模式说明:
- 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
- 消息的发送方在向Exchange发送消息时,也必须指定消息的RoutingKey
- Exchange不再把消息交给每一个绑定的队列,而是根据消息的RoutingKey进行判断,只有队列的RoutingKey与消息的RoutingKey完全一致,才会接收到消息
Direct生产者代码:
Direct消费者代码不变,只需修改两个消费者消费的队列名称即可。
4.4Topics通配符模式
Topic生产者代码:
4.5工作模式总结
5、Spring整合RabbitMQ
需求:使用Spring整合RabbitMQ
生产者发送消息代码:
消费者接收消息代码:
6、SpringBoot整合RabbitMQ
配置文件:
启动类:
配置类:
消息发送:
yml配置文件:
监听类:
小结:
- SpringBoot提供了快速整合RabbitMQ的方式
- 基本信息在yml中配置,队列交互机以及绑定关系在配置类中使用Bean的方式配置
- 生产端直接注入RabbitTemplate完成消息发送
- 消息端直接使用@RabbitListener完成消息接收



