RabbitMQ运行简述

1.简介

RabbitMQ是一个由Erlang语言实现了高级消息队列协议(Advanced Message Queuing Protocol)的开源消息队列服务软件

2.核心概念

RabbitMq包含了Publisher、Message、Broker、Virtual Host、Exchange、Binding、Queue、Connectioon、Channel、Consumer;

  • Publisher:消息的生产者,向队列中发送消息
  • message:消息生产者发送给Queue的消息,其中包含了消息内容、消息指定的Exchange、消息的路由键(routing-key)等信息
  • Broker: 消息队列服务器实体(代理服务器),用于接受和分发消息
  • Virtual Host:虚拟主机,本质上就是一个mini版的代理服务器,默认的vhost:“/”,vhost是用户级的,每个用户只能访问自己的vhost(一个用户可以指派多个vhost),为了安全性与可移植性每个vhost之间是绝对隔离的
  • Exchange:交换机,接受生产者发送的消息并根据交换机的类型和分发消息的策略来分发消息,包含4类型direct、fanout、topic、headers,direct可以实现点对点通讯模型,其余的3个可以实现发布-订阅模型
    交换机类型:
    1. direct(默认类型):消息中带的路由键(routing key)如果和Binding中的binding key一致(routing key和binding key必须完全匹配),交换机就会将消息发送到对应的队列中
    2. fanout:广播模式,每一个发送到Fanout Exchange的消息都会分发到所有绑定在该交换机上到队列中,该类型不需要routing key,而且转发消息的速度最快
    3. topic:通过对路由键的模糊匹配来分发消息到队列中,模糊匹配的规则是使用符号"#“和符号”*“作为通配符,”#" 匹配0个或多个"单词"," * “匹配一个"单词”
    4. headers: 通过AMQP的消息头在进行绑定
  • Binding:绑定,基于路由键将Exchange和Queue连接在一起的路由规则,Exchange和Queue的绑定关系可以是多对多
  • Queue:消息队列,消息的容器,用于保存生产者发送的消息直到消费者来将其取走,一条消息可进入到多个队列
  • Connectioon: 网络连接(TCP连接),生产者/消费者和代理服务器之间的TCP连接
  • Channel:信道,建立在TCP连接内的虚拟连接,节省TCP连接的资源消耗,无论是发布消息、订阅队列还是接受消息都是通过信道完成的
  • Consumer:消息的消费者,从队列中获取消息

3.运行机制

在这里插入图片描述

  1. 消息的生产者将消息发送给borker中的Virtual
    Host
    (默认的vhost是“/”),vhost在将消息交给指定的Exchange
    ,Exchang在根据消息的Binding将消息交给指定的Queue
  2. 消息的消费者(consumer) 与消息的代理服务器建立起连接(connection),建立连接之后为了节省资源在每个TCP连接中开辟了多个 管道(channel),队列中的数据通过管道来返回给消费者。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章