RabbitMQ核心概念

  • Post author:
  • Post category:其他

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的

 

1、核心概念

Message :指发送和接受的消息,包括消息头和消息体。

Publisher:消息的生产者,向交换器发布消息的应用程序,指我们程序中的生产者

Exchange:交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。Exchange有4种类型: 

    direct(直接):Exchange默认是此类型。绑定键(binding key)和路由键(routing key)完全匹配的队列才推送消息。上图中消息一推送到Q4、Q5;消息二推只送到Q4

 

    fanout(展开):给所有与之绑的队列广播消息,广播机制。

 

    topic(主题):绑定键(binding key)和路由键(routing key)规则匹配上才推送消息,*可以匹配一个单词,#可以匹配0到多个单词。上图中消息一推送到Q6、Q7;消息二推送到Q6和Q8

 

    headers(头):headers类型和前面三种不一样,headers类型的交换机分发消息不依赖routingKey,是使用发送消息时basicProperties对象中的headers来匹配的。headers是一个键值对类型,发送者发送消息时将这些键值对放到basicProperties对象中的headers字段中,队列绑定交换机时绑定一些键值对,当两者匹配时,队列就可以收到消息。匹配模式有两种,在队列绑定到交换机时用x-match来指定,all代表定义的多个键值对都要满足,而any则代码只要满足一个就可以了。fanout,direct,topic exchange的routingKey都需要要字符串形式的,而headers exchange则没有这个要求,因为键值对的值可以是任何类型。 图示说明: 消息1附带的键值对与Q9绑定键值对的color匹配、speed不匹配,但是Q9的x-match设置为any,因此只要有一项匹配消息1就可以被分发到Q9。消息1与Q10完全匹配,消息2与Q10部分匹配,由于Q10的x-match设置为all,所以只能接受到消息1。

 

Queue:消息队列,用来存放消息。

Binding:绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连

接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。Exchange 和Queue的绑定可以是多对多的关系。

Connection:网络连接,比如一个TCP连接。

Channel:信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接, AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

Consumer:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

Virtual Host:虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。 vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。


版权声明:本文为cw3225654原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。