一 消息队列组件和 RabbitMQ
- 消息中间件(MOM:Message Oriented Middleware)
名称 | MQTT | kafka | RocketMQ | Redis | RabbitMQ |
---|---|---|---|---|---|
开发语言 | C | Java | Java | C | Erlang |
客户端 | + | + | Java | + | + |
消费 | push | pull | pull/push | pull | push |
依赖 | - | JVM/ZK | nameserver | - | Erlang |
持久化 | - | 磁盘 | 磁盘 | 内存 | 内存/磁盘 |
解耦 | Y | Y | Y | Y | Y |
扩展 | N | Y | Y | O | Y |
削峰 | N | Y | Y | N | O |
回溯 | N | Y | Y | O | O |
顺序 | Y | 分区内 | O | Y | O |
协议 | MQTT | 私有 | 私有 | redis | AMQP |
- RabbitMQ 特性
- 服务端
特性 | 实现原理 |
---|---|
可靠性 | 持久化 + 传输确认 + 发布确认 |
灵活路由 | Exchange before queue |
高可用 | mirror 镜像队列 |
扩展性 | 集群 + 动态扩展集群 |
跨协议 | STOMP、MQTT 等 |
功能扩展 | 支持插件实现多方面扩展 |
- 客户端
[1] 几乎支持所有常用语言,如Java、C、python等,但是不支持Erlang(RabbitMQ的开发语言)
[2] 支持 broker push 和 consumer pull 两种消费模式,前者将不再有缓存削峰特性 - 运维
RabbitMQ 提供了一个易用的用户界面,可以通过这个界面实现消息和集群节点的监控和管理
- RabbitMQ 优劣
劣势
[1] Erlang开发,不利于二次开发
[2] 为了实现 AMQP 使得实现本身比较重,门槛被拉高优势
[1] Erlang开发,性能较高且稳定
[2] 实现了 AMQP 功能全面,
[3] 确认机制 实现消息优先级,能保证消息被消费
- RabbitMQ 文档
- 服务端文档
服务端文档 - 客户端文档
客户端文档 - 源码
git clone https://github.com/rabbitmq/rabbitmq-server.git
二 RabbitMQ 部署
- 环境准备
- RabbitMQ 集群环境 : centos7*3
- ansible 执行环境 + yum仓库环境 : centos7*1
- 搭建本地yum仓库
- 安装依赖环境
- ansible playbook编写
- 部署执行