RabbitMQ核心概念
介绍
RabbitMQ是一个由erlang语言开发的AMQP规范的开源实现。
核心概念
消息(Message)
消息是不具名的,它由消息头和消息体组成。消息体是不透明的,消息头则由一系列的可选属性组成。
生产者(Publisher)
消息生产者,是一个向交换器/队列发布消息的客户端应用程序。
消费者(Consumer)
消息的消费者,从队列中获取消息的客户端应用程序。
交换器(Exchange)
交换器用于接收生产者发送的消息,并根据消息(message)中的路由键(routing-key)路由到相应的队列中。
RabbitMQ中交换器有四种类型,不同类型交换器转发消息的策略有所不同。
消息队列(Queue)
用于临时保存消息,直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入到一个或者多个队列,知道消费者连接这个队列将其取走。
绑定(Binding)
交换器与一个或多个消息队列之间的关联就是绑定。
绑定是基于消息的路由键将交换器与消息队列关联起来的映射规则,因此可以将交换器视作由绑定组成的路由表。
连接(Connection)
就是连接,比如TCP。
信道(Channel)
信道(channel)是多路复用连接(connection)中一条独立的半双工数据通道。
信道是一条建立在真实TCP连接内的虚拟连接,AMQP命令都是通过信道发送出去的,不管是发布消息、订阅队列等动作都是通过信道完成。
信道的存在是因为对于OS来说建立与销毁TCP连接是非常昂贵的开销,使得多条信道复用一条TCP连接。
消息代理(Broker)
表示消息队列服务器实体。
虚拟主机(Virtual Host)
虚拟主机也称为vhost,vhost本质上就是一个mini版的rabbitmq服务器,它们拥有自己的队列、交换器、绑定和权限控制,而一个真实的rabbitmq服务器中可以存在多个vhost。
vhost的存在意义与mysql中的数据库有点类似,它让我们可以让每个项目都有一个独立的vhost。vhost是AMQP的基础,必须在连接时指定,而rabbitmq默认的vhost是/
。
结构图
工作流程
生产者通过相应的账户连接到对应的vhost,然后才可以将消息通过交换器发布到队列中;此时生产者的任务就完成了,然后消费者也通过账户连接到vhost,最后去队列中消费消息。
当然,rabbitmq支持多种消息模式,其中点对点模式消息是不需要经过交换器的,而是直接发布到队列。