zoukankan      html  css  js  c++  java
  • 二、RabbitMQ简介及AMQP协议

    RabbitMQ简介

    RabbitMQ是开源的消息代理和队列服务器,是由Erlang语言开发的,基于AMQP协议(Advanced Message Queuing Protocol高级消息队列协议)的标准实现。具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。

    为什么使用RabbitMQ:

    1. 安装部署简单,上手门槛低,功能丰富,符合AMQP标准;
    2. 企业级消息队列,经过大量实践考验的高可靠;
    3. 集群易扩展,可以轻松的增减集群节点;
    4. 有强大的WEB管理页面。

    RabbitMQ作为消息队列系统优势:

    从http://www.doc88.com/p-5826232080382.html 中对于RabbitMQ评价有两个维度:十万米高空看RabbitMQ和显微镜看RabbitMQ:

    • 十万米高空看RabbitMQ:
      1. 有商业化的运营,不会轻易死掉;
      2. 遵循AMQP协议,不会被绑架;
      3. 强大的社区支持,为技术进步提供动力;
      4. 大量成功的应用案例,例如阿里、网易、滴滴、美团等互联网企业都有使用。
    • 显微镜看RabbitMQ:
      1. Erlang开发,AMQP的标准实现,在支持持久化的消息队列中性能算很优秀的;
      2. 支持消息持久化、支持消息确认机制、灵活的任务分发机制等,支持功能非常丰富;
      3. 保证数据不丢失的前提做到高可靠性、可用性;
      4. 集群模式丰富,表达式配置,HA模式,镜像队列模型,集群扩展很容易,并且可以通过增加节点实现成倍的性能提升;
      5. WEB管理和监控, WEB管理为后期运维提供很大的便利。

    RabbitMQ劣势:

    性能比kafka和zero面前性能差(持久化消息和ACK确认的情况下生产和消费消息单机大约在1-2万左右)

    结论:如果希望使用一个可靠性高、功能强大、易于管理的消息队列系统那么就选择RabbitMQ,如果想用一个性能高,但偶尔丢点数据不是很在乎可以使用kafka或者zeroMQ。

    AMQP协议

    AMQP(Advanced Message Queue):高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制,可以与不同产品、不同语言之间进行消息交互。

    AMQP的基本概念

    RabbitMQ是AMQP协议的一个开源实现,其内部实际上也是AMQP的基本概念。AMQP的模型架构和RabbitMQ的模型架构是一样的,生产者将消息发送给交换器,交换器和队列绑定。当生产者发送消息时所携带的RoutingKey与绑定时的BindingKey相匹配时,消息即被存入相应的队列之中。消费者可以订阅相应的队列来获取消息。

    相关名词概念


    • Publisher
      也称Producer,消息生产者,数据的发送方。消息生产者连接RabbitMQ服务器然后将消息投递到Exchange。

    • Consumer
      消息消费者,数据的接收方。消息消费者订阅队列,RabbitMQ将Queue中的消息发送到消息消费者。

    • Server
      又称为Broker。接收客户端连接,实现AMQP的服务器实体。维护一条从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输。但是这个保证也不是100%的保证,对于普通的应用已经足够了。当然对于商业系统来说,可以再做一层数据一致性的guard,就可以彻底保证系统的一致性了。

    • Connection
      连接,Producer和Consumer都是通过TCP连接到RabbitMQ Server的。程序的起始处就是建立这个TCP连接。Connection可以创建多个Channel,但不能线程间共享。某些情况下可以并发运行,但多线程共享是非线程安全的。

    • Channel
      信道。建立在上述的TCP连接中,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。

    • Exchange
      交换机。接收消息,根据路由键转发消息到绑定的队列。Exchange将消息路由到一个或多个Queue中(或者丢弃)。Exchange并不存储消息。RabbitMQ中的Exchange有fanout、direct、topic、headers四种类型

    • Binding
      Exchange和Queue之间的虚拟连接,作用是把Exchange和Queue按照路由规则绑定起来。

    • RoutingKey
      生产者在将消息发送给Exchange的时候,一般会指定一个RoutingKey,Exchange根据这个关键字进行消息投递给Queue。这个RoutingKey需要与Exchange Type及Binding的RoutingKey联合使用才能最终生效。

    • Queue
      也称为Message Queue,消息队列,保存消息并将它们转发给消费者。多个消费者可以订阅同一个Queue,会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理

    • Virtual Host
      其实是一个虚拟概念。类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,可以用来隔离Exchange和Queue。,同一个Virtual Host里面不能有相同名称的Exchange和Queue。默认为"/"

  • 相关阅读:
    买书求如何获得折扣使价格最低
    团队开发NABC特点
    《梦断代码》读后感3
    结对开发5
    找水王问题续
    对搜狗输入法的评价
    团队项目之典型用户
    找水王问题
    电梯调度练习
    团队项目用户需求调研报告
  • 原文地址:https://www.cnblogs.com/zenghi-home/p/9959952.html
Copyright © 2011-2022 走看看