美文网首页
RabbitMQ概念简介

RabbitMQ概念简介

作者: 凭窗听风 | 来源:发表于2019-06-02 22:01 被阅读0次

    上一节我们对消息中间件和RabbitMQ本身有了大致印象,本节主要介绍RabbitMQ的模型架构。

    相关概念介绍

    1. 生产者和消费者
      Producer: 生产者,投递消息的一方,消息一般包括两个部分:消息体(payload)和标签(label).标签用来描述消息,比如交换器的名称和路由键
      Consumer: 消费者,接手消息的一方.
      Broker: 消息中间件的服务节点
    2. 队列
      Queue: 队列
      RabbitMQ的消息都存储在队列中,多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊,既轮询.RabbitMQ不支持广播消费,也不建议这么做
    3. 交换器、路由键、绑定
      Exchange: 交换器
      生产者将消息发送到Exchange,由交换器将消息路由到一个或多个队列中.如果路由不到,就丢弃或返还给生产者.
      Routingkey: 路由键
      生产者将消息发送给交换器时,会指定一个路由键RoutingKey,用来指定这个消息的路由规则,而这个RoutingKey需要与交换器类型和绑定键(BindingKey)同时使用才会生效.
      Binding: 绑定
      通过绑定将队列和交换器关联起来,绑定时一般指定一个绑定键(BindingKey),这样在生产者发送消息时就能找到队列了.
    4. 交换器类型
      RabbitMQ常用的交换器类型有fanout、direct、topic、headers四种。AMQP协议中还提到另外两种类型:System和自定义
    • fanout: 把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中.这是一种类似广播的发送方式.上面说RabbitMQ不支持广播的消息消费,是指从队列到消费者不支持广播.不要混淆.
    • direct: 按指定的RoutingKey规则将消息发送到对应BindingKey的队列中,这里的RoutingKey需要完全匹配
    • topic: 有相对复杂的匹配规则,如下:
    • RoutingKey为一个由 . 分隔的字符串,被 .分隔的每一段字符串称为一个单词,如 "com.pctf.routing1"
    • BindingKey 和 RoutingKey一样是由.分隔的字符串
    • BindingKey中可以存在两种特殊字符串 *#,用于模糊匹配.其中*用于匹配一个单词, #用于匹配0+个单词
      以下图为例;
    • headers: 不依赖路由键的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配

    RabbitMQ中Connection与Channel的关系

    无论是生产者还是消费者,都需要与RabbitMQ的Broker进行连接,每个连接都是一条tcp连接.也就是connection.一旦tcp连接建立起来,客户端就可以创建一个AMQP信道,即channel,每个channel都会被指派一个唯一id.信道是建立在channel之上的虚拟连接.
    为什么要引入信道:如果对于每个线程,都建立tcp连接,对于操作系统而言,开销过于昂贵.RabbitMQ使用类似NIO的做法,将tcp连接复用.
    每个线程把持一个信道,信道复用了tcp的连接.同时RabbitMQ可以保证每个线程的私密性.就像拥有独立连接一样.当每个信道流量不是很大时,复用连接可以有效节省tcp连接资源.然而当信道本身流量很大时,多个信道复用一个connection就会产生性能瓶颈.进而使整体的流量被限制.这时需要开辟多个connection.将信道分摊到这些connection中.

    相关文章

      网友评论

          本文标题:RabbitMQ概念简介

          本文链接:https://www.haomeiwen.com/subject/orufxctx.html