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, 能够让程序更加健壮.

  1. 解耦. 队列两端的模块完成解耦, 以队列为中心分成两个部分. 如果其中模块需要重构, 只要依旧消息传递接受过程依旧满足格式, 则就不会对另一端的模块产生影响.
  2. 冗余. 程序运行过程中总会产生各种各样的问题,如果崩溃则期间一些信息将不复存在.rabbitmq的持久化能够解决这样的问题, 当消息被持久化后, 除非接受到消息或处理掉, 消息将会一直存在.
  3. 扩展性. 因为队列的 1对N N对1 甚至 N对N 的消息队列, 在需要扩展的时候很容易处理, 只需另外增加处理过程即可. 不需要更改原代码.
  4. 峰值处理. 当某一时间点的请求过大. 消息队列能够使关键组件顶住突入起来的压力. 依次处理任务, 而不至于超负荷崩溃.
  5. 可恢复. 在消息传递的过程当中. 即便是一端进程突然挂掉. 在之后也能够进行恢复.
  6. 送达保证. 消息传递到之后, 会有送达保证. 且可以自由管理队列信息是否可以重复消费.
  7. 异步通信. 消息队列天然具有异步优势. 能够解放用户进程不至于堵塞, 提升性能.

 


其他MQ:
常用的消息队列组件有: RabbitMQ, Kafka, RocketMQ.

  1. RibbitMQ 是AMQP 的实现.
  2. Kafka属于Apache定级项目, 非AMQP协议. 基于Pull实现来处理消息消费, 追求高吞吐量.对消息的重复\丢失\错误等问题没有严格的要求.
  3. RocketMQ是阿里巴巴基于Kafka开发并开源的消息中间件. 纯Java开发. Python有现有模块. 支持事务.相对RabbitMQ来说有许多优势, 很有学习价值.
posted @ 2019-12-19 17:03  Jrri  阅读(453)  评论(0编辑  收藏  举报