RabbitMQ
消息队列
what
消息指的是两个应用间传递的数据。数据的类型有很多种形式,可能只包含文本字符串,也可能包含嵌入对象。
“消息队列(Message Queue)”是在消息的传输过程中保存消息的容器。在消息队列中,通常有生产者和消费者两个角色。生产者只负责发送数据到消息队列,谁从消息队列中取出数据处理,他不管。消费者只负责从消息队列中取出数据处理,他不管这是谁发送的数据。
why
主要有三个作用:
- 解耦
- 假设有系统 B、C、D 都需要系统 A 的数据,于是系统 A 调用三个方法发送数据到 B、C、D。
- 这时,系统 D 不需要了,那 就需要在系统 A 把相关的代码删掉。
- 假设这时有个新的系统 E 需要数据,这时系统 A 又要增加调用系统 E 的代码。
- 为了降低这种强耦合,就可以使用 MQ,系统 A 只需要把数据发送到 MQ,其他系统如果需要数据,则从 MQ 中获取即可。
- 异步。
- 一个客户端请求发送进来,系统 A 会调用系统 B、C、D 三个系统,同步请求的话,响应时间就是系统 A、B、C、D 的总和,也就是 800ms。
- 如果使用 MQ,系统 A 发送数据到 MQ,然后就可以返回响应给客户端,不需要再等待系统 B、C、D 的响应,可以大大地提高性能。
- 对于一些非必要的业务,比如发送短信,发送邮件等等,就可以采用 MQ
- 削峰
- 这其实是 MQ 一个很重要的应用。假设系统 A 在某一段时间请求数暴增,有 5000 个请求发送过来,系统 A 这时就会发送 5000 条 SQL 进入 MySQL 进行执行,高并发的请求容易导致系统瘫痪。
- 如果使用 MQ,系统 A 不再是直接发送 SQL 到数据库,而是把数据发送到 MQ,MQ 短时间积压数据是可以接受的,然后由消费者每次拉取 2000 条进行处理,防止在请求峰值时期大量的请求直接发送到 MySQL 导致系统崩溃
RabbitMQ 介绍
RabbitMQ 是一款使用 Erlang 语言开发的,实现 AMQP (高级消息队列协议) 的开源消息中间件。它有如下特点:
- 可靠性(Reliablity)。支持持久化,传输确认,发布确认等保证了 MQ 的可靠性。
- 灵活的路由分发策略(Flexible Routing)。这应该是 RabbitMQ 的一大特点。在消息进入 MQ 前由 Exchange (交换机) 进行路由消息。
- 分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。
- 支持集群(Clustering)。多台 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker。
- 高可用(Highly Avaliable Queues)。队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
- 多种协议(Multi-protocol)。RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。
- 支持多种语言客户端(Many Clients)。RabbitMQ 几乎支持所有常用编程语言,包括 Java、.NET、Ruby 等等。
- 可视化管理界面(Management UI)。RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker。
- 跟踪机制(Tracing):如果消息异常,RabbitMQ 提供了消息的跟踪机制,使用者可以找出发生了什么。
- 插件机制(Plugin System)。RabbitMQ 提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。
安装
Linux
如果您使用的是 Ubuntu 或 Debian ,可以通过以下命令进行安装 RabbitMQ:
$ sudo apt-get install rabbitmq-server
如果在 Docker 中运行 RabbitMQ ,可以使用以下命令:
$ docker run -d -p 5462:5462 rabbitmq
命令执行完毕之后,中间人(Broker)会在后台继续运行,准备输出一条 Starting rabbitmq-server: SUCCESS 的消息。
windows
安装 erLang 语言,配置环境变量
erlang 官网下载
装完之后,配置环境变量。
使用 cmd 命令,输入 erl -version 验证:
安装 RabbitMQ 服务端
在 RabbitMQ 的 gitHub 项目中,下载 window 版本的服务端安装包。
接着到双击安装,一直点下一步安装即可,安装完成后,找到安装目录:
在此目录下打开 cmd 命令,输入 rabbitmq-plugins enable rabbitmq_management 命令安装管理页面的插件:
然后双击 rabbitmq-server.bat 启动脚本,然后打开服务管理可以看到 RabbitMQ 正在运行:
这时,打开浏览器输入 http://localhost:15672,账号密码默认是:guest/guest
到这一步,安装就大功告成了!