RabbitMQ学习(一)


相关概念

队列服务,一般涉及到三个概念:生产者、队列、消费者;RabbitMQ在生产者和队列之间加入了交换器(Exchange)便于交互;避免生产者与队列的直接交互,而是生产者发送消息给交换器,交换器根据调度策略给队列。

1-1

  • 上图中 P 代表生产者;
  • 中间是 RabbitMQ 包括交换机 和 队列;
  • 上图中 C 代表消费者;

在RabbitMQ中比较重要的四个概念:虚拟主机、交换机、队列、绑定

  • 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定;可以有多个虚拟主机的原因是因为:在RabbitMQ中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机“/”。
  • 交换机(Exchange):用于转发消息,不做存储;如果没有 Queue bind 到 Exchange 的话,会直接丢弃掉 Producer 发送的消息。交换机中还有一个重要的东西:路由键,交换机发送到指定的队列,需要根据路由键来转发。
  • 绑定:交换机和队列需要绑定,如上图所示为多对多关系。

详细讲解

交换机

交换机有四种类型:Direct,Topic,Headers and Fanout

  • Direct:’先匹配,再投送’。在绑定是设置一个routing_key,消息的routing_key匹配时,才会被投送到绑定的队列中去。
  • Topic:按自定义规则转发消息。
  • Headers:设置header attribute参数类型的交换机。
  • Fanout:转发消息到所有绑定队列。
Direct Exchange

Direct Exchange是RabbitMQ默认的交换机模式,根据key去匹配寻找队列。

2

如图,X-Q1有一个 routing_key 为 orange;X-Q2有两个 routing_key 为 black、green;Q1接收 orange 的消息,Q2接收 black 和 green 的消息。

Topic Exchange

转发消息主要根据通配符。这种交换机下,队列和交换机的绑定会定义一种路由模式,通配符在这种路由模式和路由键之间匹配后交换机才能转发消息。

这种模式下:

  • 路由键必须是一串字符,字符之间用 英文状态的句号隔开(.),比如spring官网的RabbitMQ例子中的 routing_key – foo.bar.#
  • 路由键必须包含一个 * 或者 # 。主要用于匹配路由键指定位置的单词,可以使用两个通配符
    • *:指定位置的一个单词
    • #:指定位置的零个或多个单词
Headers Exchange

这个模式也是根据规则匹配,相较于Direct 和 Topic 固定的使用 routing_key , Headers是一个自定义匹配规则的类型。在交换器与队列绑定时,会设定一组键值对规则,消息中也包括一组键值对(Headers 属性 ),这些键值对有一对或者全部匹配时,消息就会被投送到对应的队列。

Fanout Exchange

广播消息,不管路由模式或者路由键,会把消息投送给绑定的全部队列,即使配置了 routing_key 也会被忽略。


文章作者: Cody_
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Cody_ !
评论
 上一篇
Java锁的分类总结 Java锁的分类总结
锁在Java中充当了十分重要的角色,不同的锁在不同的场景下能够大大提高程序的运行效率。文章将对不同锁做一个简单的总结。 首先附上两张分类图: 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Ja
2019-07-03
下一篇 
Vue知识点及基础 Vue知识点及基础
记录一次Vue知识点的讲解笔记以及一些前端小知识 基础ES5 数组map:遍历,得到新数组 [1, 2, 3].map(i => i*2) // [2, 4, 6] find:查找一个元素,返回元素 [1, 2, 3].find(i =>
2019-05-29
  目录