介绍
RabbitMQ
MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。RabbitMQ官方地址:www.rabbitmq.com/
开发中消息队列通常有如下应用场景:
1、任务异步处理。
将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
2、应用程序解耦合
MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。
使用RabbitMQ的优点
1、使得简单,功能强大。
2、基于AMQP协议。
3、社区活跃,文档完善。
4、高并发性能好,这主要得益于Erlang语言。
5、Spring Boot默认已集成RabbitMQ
AMPQ
AMQP是一套公开的消息队列协议,最早在2003年被提出,它旨在从协议层定义消息通信数据的标准格, 为的就是解决MQ市场上协议不统一的问题。RabbitMQ就是遵循AMQP标准协议开发的MQ服务。 官方:www.amqp.org/
Java消息服务
JMS是java提供的一套消息服务API标准,其目的是为所有的java应用程序提供统一的消息通信的标准,类似java的jdbc,只要遵循jms标准的应用程序之间都可以进行消息通信。它和AMQP有什么不同,jms是java语言专属的消息服务标准,它是在api层定义标准,并且只能用于java应用;而AMQP是在协议层定义的标准,是跨语言的 。
快速入门
RabbitMQ工作原理

- Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue。
- Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
- Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。
- Producer:消息生产者,即生产方客户端,生产方客户端将消息发送到MQ。
- Consumer:消息消费者,即消费方客户端,接收MQ转发的消息
消息发布接收流程:
-----发送消息-----
1、生产者和Broker建立TCP连接。
2、生产者和Broker建立通道。
3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发。
4、Exchange将消息转发到指定的Queue(队列) ----接收消息-----
1、消费者和Broker建立TCP连接
2、消费者和Broker建立通道
3、消费者监听指定的Queue(队列)
4、当有消息到达Queue时Broker默认将消息推送给消费者。
5、消费者接收到消息。
下载并安装
RabbitMQ由Erlang语言开发,Erlang语言用于并发及分布式系统的开发,在电信领域应用广泛,OTP(OpenTelecom Platform)作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件及工具库,安装RabbitMQ需要安装Erlang/OTP,并保持版本匹配,如下图:RabbitMQ的下载地址:www.rabbitmq.com/download.ht…

- 1)下载erlang地址如下:erlang.org/download/ot… erlang安装完成需要配置erlang环境变量: ERLANG_HOME=D:\Program Files\erl9.3 在path中添 加%ERLANG_HOME%\bin;
- 安装RabbitMQ github.com/rabbitmq/ra…
启动
安装成功后会自动创建RabbitMQ服务并且启动。
- 1)从开始菜单启动RabbitMQ 完成在开始菜单找到RabbitMQ的菜单:

RabbitMQ Service-remove 删除服务
RabbitMQ Service-start 启动
RabbitMQ Service-stop 启动
- 2)如果没有开始菜单则进入安装目录下sbin目录手动启动:

- 1)安装并运行服务 rabbitmq-service.bat install 安装服务 rabbitmq-service.bat stop 停止服务rabbitmq-service.bat start 启动服务
- 2)安装管理插件安装rabbitMQ的管理插件,方便在浏览器端管理RabbitMQ 管理员身份运行rabbitmq-plugins.bat enable rabbitmq_management
- 3、启动成功 登录RabbitMQ 进入浏览器,输入:http://localhost:15672

注意事项
1、安装erlang和rabbitMQ以管理员身份运行。
2、当卸载重新安装时会出现RabbitMQ服务注册失败,此时需要进入注册表清理erlang 搜索RabbitMQ、ErlSrv,将对应的项全部删除。
Hello World
按照官方教程(www.rabbitmq.com/getstarted.…)测试hello world:

搭建环境
- 1)java client 生产者和消费者都属于客户端,rabbitMQ的java客户端如下:

- 我们先用 rabbitMQ官方提供的java client测试,目的是对RabbitMQ的交互过程有个清晰的认识。 参考 :github.com/rabbitmq/ra…
- 2)创建maven工程 创建生产者工程和消费者工程,分别加入RabbitMQ java client的依赖。
rabbitmq-producer:生产者工程
rabbitmq-consumer:消费者工程
- Maven依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp‐client</artifactId>
<version>4.0.3</version><!‐‐此版本与spring boot 1.5.9版本匹配‐‐>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐logging</artifactId>
</dependency>
- GitHub代码地址
- 消费者
- github.com/flagest/onl…
- 生产者
- github.com/flagest/onl…