RabbitMQ核心概念

RabbitMQ核心概念

  • 规范:AMQP几乎支持全部常用语言
  • 语言:Erlang
  • 单机吞吐量:万级
  • 时效性:us
  • 高可用性:主从架构
  • 消息丢失:可能性低
  • 消息推拉模式:Push/Pull
  • 特性:并发能力强、延时非常低、通过http://yourIP:15672/可以可视化访问

核心概念

1. 生产者(Producer)& 消费者(Consumer)

2. 消息(Message)

包括消息头(或称Label)和消息体(或称payLoad)。

消息头由一系列可选属性组成,包括routing-key路由键、priority优先级、delivery-mode(指出该消息可能需要持久化存储)


3. 交换器(Exchange)

  • Exchange相当于一个路由表,用于接收生产者发送的消息并将这些消息路由给服务器中的队列,如果路由不到,或许可能返回给生产者,或许会被直接丢弃掉。

  • Producer将Message交给Exchange时,会指定一个RoutingKey(路由键),用于指定这个消息的路由规则,而这个RountingKey需要与“交换器类型”和“绑定键(BindingKey)”联合使用才能最终生效

    1.Producer将Message发送给Exchange时需要一个RoutingKey,当RoutingKey和BindingKey匹配时,消息会被路由到对应Queue;

2.BindingKey并不是所有情况都有效,它依赖于Exchange类型,比如fanout类型的Exchange就会无视BindingKey。

(1)绑定(Binding) & 绑定键(BindingKey)

RabbitMQ中通过绑定将Exchange和Queue关联起来,绑定的时候一般会指定一个绑定键(BindingKey),这样RabbitMQ就知道如何正确将消息路由到队列了。

(2)交换器类型

  1. direct默认。把所有发送到该Exchange的消息路由到BindingKey和RountingKey匹配的Queue中。常用在有优先级的任务,根据任务优先级将消息发到不同队列,这样可以分配更多资源给高优先级队列。

  2. fanout:把所有发送到该Exchange的消息路由到与它绑定的所有Queue中,不需要做任何判断,所以速度最快。常用于广播消息

  3. topic:是一种优化的direct,把所有发送到该Exchange的消息路由到BindingKey和RountingKey匹配的Queue中,但是匹配规则支持多字符串、支持模糊匹配

    1.通过.分隔字符串,比如java.util.concurrent

  4. 通过*匹配任意单词、#匹配0或多个单词,如java.util.*/#.concurrent

  5. headers不推荐,性能较差,根据headers属性进行匹配。


4. 消息队列(Queue)

Queue保存消息直到被消费者消费。

RabbitMQ的消息只能保存在消息队列Kafka的消息只能保存在topic

多个Consumer可以订阅同一个Queue,这时队列中的消息会轮询交给多个Consumer处理,而不是每个Consumer都收到所有消息。

5. Broker = Exchange + Queue

-------------本文结束感谢您的阅读-------------

本文标题:RabbitMQ核心概念

文章作者:DragonBaby308

发布时间:2019年07月31日 - 22:55

最后更新:2020年01月25日 - 13:11

原始链接:http://www.dragonbaby308.com/rabbitmq/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%