MQ介绍及Rabbit工作模式

473 阅读4分钟

MQ的优势及劣势

优势:

  1. 应用解耦:系统或模块间的互相调用复杂,维护起来麻烦。这些调用有些不需要直接同步的,可采用异步方式解耦。
  2. 异步提速。
  3. 削峰填谷。

劣势:

  1. 降低系统可用性:引入外部系统,如外部系统出现故障(挂掉),就需要考虑应对出现的方案
  2. 提高系统复杂度:使用MQ,除了需要考虑MQ系统的稳定性,还需要考虑重复消费、消息丢失、消息书按需等问题。
  3. 带来的一致性问题:一个系统写入成功,另外请求处理不一定成功。

常见的MQ对比

image.png

AMQP协议

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级 消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不 同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。

RabbitMQ架构及名词介绍

image.png

  • Broker 接收和发送消息的引用
  • Virtual host 多租户和安全因素设计,如网络中namespace概念。当多个不同用户连接一个RabbitMQ Server,可划分不同的Virtual host,每个用户用自己Virtual host创建exchange/queue.
  • Exchange: message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去 。常用的类型有:
    • direct (point-to-point)定向,
    • topic (publish-subscribe)通配符
    • fanout (multicast)广播。 只负责转发消息,不可存储消息,因此如果没有队列与Exchange绑定或没有符合路由规则的队列,消息会丢失。
  • Queue:RabbitMQ 的内部对象,用于存储消息。
  • Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据
  • ConnectionFactory:mq连接工程,可以new Connection。
  • Connection:Connection是socket链接,封装socket协议相关部分逻辑。是Publisher和consumer和broker之间的TCP连接
  • Channel(信道):信道是建立在“真实的”TCP连接上的虚拟连接,在一条TCP链接上创建多少条信道是没有限制的,把他想象成光纤就是可以了。它是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

RabbitMQ-工作模式介绍

  1. 简单模式:生成者直接将消息发送给队列,消费者直接从队列取消息。
  2. 工作模式:与简单模式对比,多了一个及以上的消费端,多个消费端共同消费同一个队列里的消息。 对于任务重或任务多可采用次模式提高出来的速度。多个消费这,默认是轮询模式。轮询模式在不同消费者处理消息能力不一致时可通过设置【basicQos(1); 处理完一个消息在从队列中获取消息】
  3. 发布订阅模式: 多了个Exchange角色,过程大致如下:
    • 生产者P:生产者不再往队列中发送消息,而是往Exchange发送。
    • 消费者C:消费者会一直等待消息
    • 队列Queue: 消息队列,接受消息,缓存消息
    • Exchange交换机:接收生产者投递的消息,根据Exchange类型决定消息:投递特殊队列、投递的所有队列、消息丢弃
      • direct (point-to-point)定向,
      • topic (publish-subscribe)通配符
      • fanout (multicast)广播。
  4. 路由模式
  5. 主题模式
  6. RPC image.png image.png

工作模式与发布订阅区别

  • 工作队列模式不用定义交换机,而发布/订阅模式需要定义交换机
  • 发布/订阅模式的生产方是面向交换机发送消息,工作队列模式的生产方是面向队列发送消息(底层使用默认交换机)
  • 发布/订阅模式需要设置队列和交换机的绑定,工作队列模式不需要设置,实际上工作队列模式会将队列绑 定到默认的交换机

参考

RabbitMQ官网六种模式介绍