RabbitMQ
AMQP
AMQP(Advanced Message Queuing Protocol) 高级消息队列协议,是应用层协议的一个开发标准,为面向对象的中间件设计.消息中间件用于组件之间的解耦: 消息的发送者和接受者都不需要知道对方的存在.
AMQP主要特征是面向消息\队列\路由\可靠性\安全.
RabbitMQ
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、Java、C、PHP
RabbitMQ中比较重要的对象 ConnectionFactory,Connection,Channel
ConnectionFactory,为Connection的工厂, 负责创建Connection.Connection是RabbitMQ的socket链接,封装了一部分的socket协议相关逻辑.
Channel来完成我们的大部分业务, 包括Queue,Exchange的定义
Python中使用RabbitMQ服务, 可以使用现成组件pika, txAMQP或者py-amqplib等
在使用pika过程中, 分别编写发送者和消费者, 绑定对应的exchange和queue.
相关:
消息队列的优点:
消息队列在程序开发中非常重要, 面向对象开发中AMQP是个很好的标准. 使用实现AMQP的rabbitMQ, 能够让程序更加健壮.
- 解耦. 队列两端的模块完成解耦, 以队列为中心分成两个部分. 如果其中模块需要重构, 只要依旧消息传递接受过程依旧满足格式, 则就不会对另一端的模块产生影响.
- 冗余. 程序运行过程中总会产生各种各样的问题,如果崩溃则期间一些信息将不复存在.rabbitmq的持久化能够解决这样的问题, 当消息被持久化后, 除非接受到消息或处理掉, 消息将会一直存在.
- 扩展性. 因为队列的 1对N N对1 甚至 N对N 的消息队列, 在需要扩展的时候很容易处理, 只需另外增加处理过程即可. 不需要更改原代码.
- 峰值处理. 当某一时间点的请求过大. 消息队列能够使关键组件顶住突入起来的压力. 依次处理任务, 而不至于超负荷崩溃.
- 可恢复. 在消息传递的过程当中. 即便是一端进程突然挂掉. 在之后也能够进行恢复.
- 送达保证. 消息传递到之后, 会有送达保证. 且可以自由管理队列信息是否可以重复消费.
- 异步通信. 消息队列天然具有异步优势. 能够解放用户进程不至于堵塞, 提升性能.
其他MQ:
常用的消息队列组件有: RabbitMQ, Kafka, RocketMQ.
- RibbitMQ 是AMQP 的实现.
- Kafka属于Apache定级项目, 非AMQP协议. 基于Pull实现来处理消息消费, 追求高吞吐量.对消息的重复\丢失\错误等问题没有严格的要求.
- RocketMQ是阿里巴巴基于Kafka开发并开源的消息中间件. 纯Java开发. Python有现有模块. 支持事务.相对RabbitMQ来说有许多优势, 很有学习价值.