zoukankan      html  css  js  c++  java
  • RabbitMQ:一、入门

    消息中间件

    • 使用消息中间件的作用

      • 解耦
      • 削峰
      • 异步
      • 顺序保证
      • 冗余(存储)
    • 使用MQ带来的问题

      • 系统的可用性降低
      • 系统的复杂性提高
    • RabbitMQ的特点

      • 可靠性
      • 灵活的路由
      • 扩展性
      • 高可用
      • 多语言客户端
      • 插件机制
      • 多协议(主要还是AMQP)

    相关概念

    • Producer:生产者,投递消息的一方
    • Consumer:消费者,接收消息的一方
    • Broker:RabbitMQ的服务节点
    • Queue:队列,是RabbitMQ的内部对象,用于存储消息。RabbitMQ中消息只能存储在队列中,这一点和Kafka这种消息中间件相反。Kafka将消息存储在topic(主题)这个逻辑层面,而相应的队列逻辑只是topic实际存储文件中的位移标识。RabbitMQ 的生产者生产消息井最终技递到队列中,消费者可以从队列中获取消息并消费。
      多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊 CRound-Robin ,即轮询)
      给多个消费者进行处理,而不是每个消费者都收到所有的消息井处理,如图所示

      RabbitMQ 不支持队列层面的广播消费,如果需要广播消费,需要在其上进行 次开发,处理逻辑会变得异常复杂,同时也不建议这么做。
    • Exchange:交换器。上图看起来像是我们将消息丢到消息队列当中,实际上这在rabbitMQ中不会发生。实际上生产者将消息丢到交换器中,由交换器将消息路由到一个或者多个队列中。
      如果路由不到,或许返回给生产者,或许直接丢弃。交换器有四种类型。交换器可以理解成一个绑定列表。
    • RoutingKey:路由键。生产者将消息->交换器时,一般指定一个RoutingKey来决定路由规则。RoutingKey需要和交换器类型及绑定键联合使用。
    • Binding:绑定。通过绑定将队列和交换器关联起来。绑定时一般会指定绑定键(BingdingKey),当RoutingKey与BingdingKey匹配时,消息会被路由到对应的队列中。
    • 交换器类型
      • fanout:把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
      • direct:把消息路由到那些BindingKey与RoutingKey完全匹配的队列中。
      • topic:与direct类型有些类似,不过队列的匹配规则有些不同
        • RoutingKey为"."号分隔的字符串(被分开的每一段独立字符称为一个单词),如"com.rabbitmq.client","java.util.concurrent";
        • BindingKey的形式与RoutingKey一样;
        • BindingKey可以存在两种特殊字符串"","#",用于做模糊匹配,""用于匹配1个单词,"#"用于匹配多个单词(可以是0个)。
      • headers:不依赖于路由键的规则,而是根据消息内容中的headers属性进行匹配。绑定队列和交换器时指定键值对,发送消息到交换器时,RabbitMQ会拿headers属性里的键值对进行对比,完全匹配则会路由到对应队列。headers类型交换器性能很差,很少使用。
    • Connection:生产者与消费者和Broker之间建立的TCP连接。
    • Channel:信道。建立在Connection之上的虚拟连接。RabbitMQ处理的每条AMQP指令都是通过信道完成的。

      RabbitMQ通过采用类似NIO的做法,选择TCP连接复用,减少性能开销,便于管理。

    参考资料:RabbitMQ实战指南

  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/fcb-it/p/12945852.html
Copyright © 2011-2022 走看看