RabbitMQ基本概念详细介绍

2021年11月25日 阅读数:1
这篇文章主要向大家介绍RabbitMQ基本概念详细介绍,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1、RabbitMQ简介html

   一、RabbitMQ是一个开源的消息代理的队列服务器,用来经过普通协议在彻底不一样的应用之间共享数据。服务器

  二、RabbitMQ是使用Erlang语言来编写的,而且RabbitMQ是基于AMQP协议的。网络

  三、Erlang语言在数据交互方面性能优秀,有着和原生Socket同样的延迟,这也是RabbitMQ高性能的缘由所在。性能

  AMQP协议:Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。ui

 

2、RabbitMQ特色spa

  一、可靠性:RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。插件

  二、灵活的路由:在消息进入队列以前,经过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,能够将多个 Exchange 绑定在一块儿,也经过插件机制实现本身的 Exchange。设计

  三、消息集群:多个 RabbitMQ 服务器能够组成一个集群,造成一个逻辑 Broker 。代理

  四、高可用:队列能够在集群中的机器上进行镜像,使得在部分节点出问题的状况下队列仍然可用。htm

  五、多种协议:RabbitMQ 支持多种消息队列协议,好比 STOMP、MQTT 等等。

  六、多语言客户端:RabbitMQ 几乎支持全部经常使用语言,好比 Java、.NET、Ruby 等等。

  七、管理界面:RabbitMQ 提供了一个易用的用户界面,使得用户能够监控和管理消息 Broker 的许多方面。

  八、跟踪机制:若是消息异常,RabbitMQ 提供了消息跟踪机制,使用者能够找出发生了什么。

  九、插件机制:RabbitMQ 提供了许多插件,来从多方面进行扩展,也能够编写本身的插件。

 

3、RabbitMQ消息模型

  全部 MQ 产品从模型抽象上来讲都是同样的过程,以下:

   消费者(consumer)订阅某个队列。生产者(producer)建立消息,而后发布到队列(queue)中,最后将消息发送到监听的消费者。

 

4、RabbitMQ核心概念

  一、Broker:表示消息队列服务器实体。接受客户端的链接,实现AMQP实体服务。简单来讲就是消息队列服务器实体。

   二、Connection:网络链接,好比一个TCP链接。应用程序与Broker的网络链接。

  三、Channel:网络信道,几乎全部的操做都在Channel中进行,Channel是进行消息读写的通道。客户端可创建多个Channel,每一个Channel表明一个会话任务。也就是说,通常状况是程序起始创建TCP链接,第二步就是创建这个Channel。

  四、Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties能够对消息进行修饰,好比消息的优先级、延迟等高级特性;Body则就是消息体内容。

  五、Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面能够有若干个Exchange和Queue,同一个VirtualHost 里面不能有相同名称的Exchange或Queue。

每一个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有本身的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在链接时指定,RabbitMQ 默认的 vhost 是 / 。
  六、Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列。它指定消息按什么规则,路由到哪一个队列。
  七、Binding:Exchange和Queue之间的虚拟链接,binding中能够包含routing key。用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列链接起来的路由规则,因此能够将交换器理解成一个由绑定构成的路由表。它的做用就是把exchange和queue按照路由规则绑定起来。
  八、Routing key:一个路由规则,虚拟机可用它来肯定如何路由一个特定消息。exchange根据这个关键字进行消息投递。
  九、Queue:也称为Message Queue,消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者链接到这个队列将其取走。
  十、Producer:消息生产者,就是投递消息的程序。也是一个向交换器发布消息的客户端应用程序。
  十一、Consumer:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

 5、各个具体流程

  一、AMQP的消息路由过程

  

6、Exchange 说明

  0、属性

    Durability:是否须要持久化 ,默认为 true 表示持久化

     Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange

     Internal:当前Exchange是否用于RabbitMQ内部使用,默认为False

     Arguments:扩展参数,用于扩展AMQP协议自制定化使用Name:交换机名称

 

  一、四种类型:direct、fanout、topic、headers 

  • headers:headers 匹配 AMQP 消息的 header 而不是路由键,此外 headers 交换器和 direct 交换器彻底一致,但性能差不少,目前几乎用不到了。direct:
  • direct:类型的Exchange路由规则很简单,它会把消息路由到那些binding key与routing key彻底匹配的Queue中,不匹配的则不会转发,它是单播的模式。以下图: 
  • fanout:每一个发到 fanout 类型交换器的消息都会分到全部绑定的队列上去。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每一个发送到交换器的消息都会被转发到与该交换器绑定的全部队列上,fanout 类型转发消息是最快的。以下图:

  

  • topic:前面讲到direct类型的Exchange路由规则是彻底匹配binding key与routing key,但这种严格的匹配方式在不少状况下不能知足实际业务需求。topic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage类似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不一样,它约定:

    一、routing key为一个句点号“. ”分隔的字符串(咱们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”

     二、binding key与routing key同样也是句点号“. ”分隔的字符串

     三、binding key中能够存在两种特殊字符“*”与“#”,用于作模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(能够是零个)

    示意图以下

  

 

    示意图说明:以上图中的配置为例,routingKey=”quick.orange.rabbit”的消息会同时路由到Q1与Q2,routingKey=”lazy.orange.fox”的消息会路由到Q1,routingKey=”lazy.brown.fox”的消息会路由到Q2,routingKey=”lazy.pink.rabbit”的消息会路由到Q2(只会投递给Q2一次,虽然这个routingKey与Q2的两个bindingKey都匹配);routingKey=”quick.brown.fox”、routingKey=”orange”、routingKey=”quick.orange.male.rabbit”的消息将会被丢弃,由于它们没有匹配任何bindingKey。

    其余示意图:

    

 

操做方式:点这里