X

RabbitMQ实战应用技巧

1. RabbitMQ实战应用技巧

1.1. 前言

由于项目原因,之后会和RabbitMQ比较多的打交道,所以让我们来好好整理下RabbitMQ的应用实战技巧,尽量避免日后的采坑

1.2. 概述

RabbitMQ有几个重要的概念:虚拟主机,交换机,队列和绑定

  • 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定,我们可以从虚拟主机层面的颗粒度进行权限控制
  • 交换机:Exchange用于转发消息,它并不存储消息,如果没有Queue队列绑定到Exchange,它会直接丢弃掉生产者发来的数据。
  • 交换机还有个关联的重要概念:路由键,消息转发到哪个队列根据路由键决定
  • 绑定:就是绑定交换机和队列,它是多对多的关系,也就是说多个交换机可以绑同一个队列,也可以一个交换机绑多个队列

1.3. 交换机

交换机有四种类型的模式Direct, topic, Headers and Fanout

1.3.1. Direct Exchage

Direct模式使用的是RabbitMQ的默认交换机,也是最简单的模式,适合比较简单的场景

如下图所示,使用Direct模式,我们需要创建不同的队列,而默认交换机则通过Routing key路由键的值来决定转发到哪个队列,可以看到,路由键绑定队列是可以指定多个的

1.7. 交换机属性

  1. exchange : 交换机名称
  2. type : 交换机类型
  3. durable : 持久化,同队列
  4. autoDelete : 是否自动删除,同队列
  5. internal : 若为true,表示这个exchange不可以被client用来推送消息,仅用来进行exchange和exchange之间的绑定。
  6. arguments : 额外参数,目前只有个alternate-exchange,表示当生产者发送消息到这个交换机,路由不到该交换机的队列,则会尝试这个参数指定的交换机进行路由,若路由键匹配,则路由到alternate-exchange指定的队列,相当于转发了,刚好和上一个参数internal配合,若不想本交换机起到路由队列的作用,可以设置internal为true,把消息都转发到alternate-exchange指定的交换机,由该交换机来路由指定队列,
  • 如下图:exchange0设置了alternate-exchange交换机为exchange1,生产者发送数据到exchange0路由键为test1,在exchange0路由不到,则转发到exchange1判断路由符合,发送到队列queue1