RabbitMQ 1 分布式消息中间件 MQ选用 RabbitMQ特点,流程,名词介绍
uwupu 啦啦啦啦啦

分布式消息中间件

  • ActiveMQ

  • RabbitMQ

    • 在AMQP基础上完成
    • 优点:
      • 基于erlang语言,高并发特性
      • 吞吐量万级
      • MQ功能完善
      • 支持多种编程语言
      • 开源管理界面完善
      • 社区活跃度高
    • 缺点
      • 商业版收费
      • 学习成本高
  • Kafka

    • 优点:性能很强,单机写入TPS约百万条/s。
    • 缺点:
      • 在单机超过64队列/分区,Load会发生明显的飙高现象。队列越多,load越高,发送响应时间变长;
      • 一台宕机,就会产生消息乱序。
      • 消费失败不支持重试
  • RocketMQ

    • 阿里、滴滴开发的国产分布式消息中间件
    • 优点:
      • 单机吞吐量十万级,
      • 消息可以做到0丢失,
      • 支持分布式,扩展性好。
      • 支持10亿级别消息堆积;
      • 支持自定义
    • 缺点:
      • 支持的客户端不多。

MQ区别/MQ选用

ActiveMQ RabbitMQ Kafka RocketMQ
发布订阅 支持 支持 支持 支持
轮询分发 支持 支持 支持 /
公平分发 / 支持 支持 /
重发 支持 支持 / 支持
消息拉取 / 支持 支持 支持
  • Kafuka
    • 基于Pull模式处理消息消费,追求高吞吐量
    • 适用于大量数据的互联网服务的数据收集业务
    • 场景:日志采集
    • 适合大型公司
  • RocketMQ
    • 适用于可靠性要求较高的场景。
    • 场景:金融互联网。
    • 在阿里双11经历多次考验。
  • RabbitMQ
    • 结合erlang语言并发优势,时效性微秒级,社区活跃度高;
    • 使用方便
    • 场景:消息量不是那么大的场景
    • 适合中小型公司。

RabbitMQ

负责数据存储与转发。

特点

  • 削峰:将访问的人员进行排队,
    • 若一个时间段有20000个请求,而服务器同时只能接收100个请求,RabbitMQ负责将大请求进行排队,依次进入服务器进行处理。
  • 应用解耦
    • 在一次订单过程中,订单需要经过:订单系统,库存系统,物流系统,支付系统等几个过程。若其中有任意一个出现问题,订单会执行失败。
    • 为解决问题,RabbitMQ可以进行解耦。解耦后,任意一个系统出现问题,消息会被缓存到消息队列中,直到系统被修复,这样可以避免整个过程重新执行。
    • 提升可用性
  • 异步处理
    • 若A要调用B且需要B的返回结果,若B需要很长时间,A需要等待B,这个效率很低;
    • 若MQ出现后,A只需要将消息交给MQ即可,当B完成后,将结果交给MQ,MQ将消息通知给A即可。

原理

RabbitMQ使用的是基于tcp/ipamqp协议

  • amqp,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议。

流程

  • 生产者
  • MQ
    • 交换机
      • 交换机绑定队列
    • 队列
      • 队列绑定消费者
  • 消费者

名词介绍

  • Broker:接收和分发消息的应用。RabbitMQ Server就是一个Broker

  • Server:又称Broker,接收客户端的连接,实现AMQP的实体服务;

  • Connection:连接,应用程序与Broker的TCP/IP连接。

  • Channel:网络信道,几乎所有的操作都在Channel中进行,Channel进行消息读写的通道,客户端可以建立多个Channel,每个Channel代表一个会话任务;

    • 如果每一次访问创建一个Connection,会建立大量的TCP连接,Connection的开销是巨大的,效率也低。Channel是在Connection内部建立的逻辑连接,若应用程序支持多线程,通常每个thread创建单独的channel进行通讯。
    • AMQP报文包含了Channel Id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。
  • Message:消息,服务器与应用程序之间传送的数据,由Properties和Body组成,

    • Properties对消息进行修饰,比如消息的优先级,延迟等高级特性,
    • Body是消息体的内容;
  • Virtual Host:虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个虚拟主机里可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名字的Exchange;

  • Exchange:交换机,接收消息,根据分发规则匹配Routing Key发送消息到绑定的队列(不具备消息存储能力)。

    • 常用类型:direct(point-to-point),topic(publish-subscribe)和fanout(multicast)
      • direct:匹配路由键,只有完全匹配,消息才会被转发
      • fanout:将消息发送至所有的队列
      • topic:将路由进行模式匹配
        • #匹配一个或多个词
        • "匹配不多不少一个词
  • Bindings:Exchange与Queue之间的虚拟连接,Binding中可以保护多个routing key。

  • Routing key:生产者将消息发送到交换机时会携带一个key,来制定路由规则;

  • Queue:队列,也称为Message Queue消息队列,保存消息并将它们转发给消费者。

使用场景

  • 分布式事务可靠消息的可靠生产
  • 索引、缓存、静态化处理的数据同步
  • 流量监控
  • 日志监控(ELK)
  • 下单,订单分发,抢票。
 评论