RabbitMQ基础知识总结


关键词

  • 异步
  • 削峰
  • 解耦

简介

RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件

名词介绍

  • Producer:消息生产者。投递消息
  • Consumer:消息消费者。接收消息
  • Exchange:消息交换机。根据策略和路由分发消息
  • Queue:消息队列载体。消息被分发到一个或多个队列
  • Binding: 绑定交换机和消息队列
  • Binding Key:绑定交换机和消息队列的Key
  • Routing Key:生产者发送消息给交换机时指定,必须与Binding Key搭配使用
  • Broker:消息队列服务器实体
  • vhost:虚拟主机。一个Broker里可以开多个vhost,用作不同用户权限分离

消息 (Message)

消息一般由消息头和消息体组成。消息体是不透明的。消息头由一系列的可选属性组成,包括 routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)

生产者和消费者 (Producer & Consumer)

生产者把消息投递给交换机,交换机分发给对应的队列,消费者监听队列接收消息

消息队列 (Queue)

RabbitMQ的消息只能存储在队列中

当消息分发到队列后,消息将会一直存储在队列直到被消费

消息交换机 (Exchange)

消息必须通过交换机分发到对应的队列中

direct和topic模式下,队列和交换机通过Binding Key绑定,生产者通过Routing Key发送给匹配Binding Key的队列

交换机有4种类型,不同类型对应不同路由策略:direct,fanout, topic, headers

direct (默认)

路由到Routing Key和Binding Key完全匹配的队列

fanout

路由到交换器绑定的所有队列

topic

topic模式较灵活,也是路由到Routing Key和Binding Key匹配的队列,但这里的匹配规则比较灵活

  • Routing Key和Binding Key都是被“.”分割的单词组
  • Binding Key存在特殊字符“*”匹配任意一个单词
  • Binding Key存在特殊字符“#”匹配任意个单词(可以为零)
  • 例如: com.cn.c可以匹配com.cn.*或com.#

headers

headers 类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers 属性进行匹配。在绑定队列和交换器时指定一组键值对,当发送消息到交换器时,RabbitMQ会获取到该消息的 headers(也是一个键值对的形式),对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。


← Prev Redis常见问题总结 | 64.最小路径和 Next →