RabbitMQ安装与测试(Docker方式)

(一)简介

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

(二)核心概念

  1. Message:消息头和消息体组成,消息体是不透明的,而消息头上则是由一系列的可选属性组成,属性:路由键routing-key,优先级priority,指出消息可能需要持久性存储delivery-mode

  2. Publisher:消息的生产者,也是一个向交换器发布消息的客户端应用程序。

  3. Exchange:交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。四种类型:directfanouttopicheaders,发布订阅,不同类型的Exchange转发消息的策略有所区别。

  4. Queue:消息队列,用来保存消息直到发送给消费者,它是消息的容器,也是消息的终点,一个消息可投入一个或多个队列,消息一直在队列里面,等待消费者连接到这个队列将数据取走。

  5. Binding:绑定,队列和交换机之间的关联,多对多关系。

  6. Connection:网络连接,例如TCP连接。

  7. Channel:信道,多路复用连接中的一条独立的双向数据流通道,信道是建立在真是的TCP链接之内的虚拟连接AMQP命令都是通过信道发送出去的。不管是发布消息,订阅队列还是接受消息,都是信道,减少TCP的开销,复用一条TCP连接。

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

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

  10. Broker:表示消息队列 服务实体。

RabbitMQ安装与测试(Docker方式)_第1张图片

(三)运行机制

AMQP 中消息的路由过程和 Java 开发者熟悉的 JMS 存在一些差别,AMQP 中增加了 ExchangeBinding的角色。生产者把消息发布到Exchange上,消息最终到达队列并被消费者接收,而Binding决定交换器的消息应该发送到那个队列。

RabbitMQ安装与测试(Docker方式)_第2张图片

Exchange 类型
Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:directfanouttopicheaders 。headers匹配 AMQP 消息的 header 而不是路由键, headers 交换器和 direct 交换器完全一致,但性能差很多,目前几乎用不到了,所以直接看另外三种类型:
direct:消息中的路由键(routing key)如果和Binding中的binding key一致, 交换器就将消息发到对应的队列中。它是完全匹配、单播的模式。

RabbitMQ安装与测试(Docker方式)_第3张图片

fanout:每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。fanout交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。

RabbitMQ安装与测试(Docker方式)_第4张图片

topic:topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。#匹配0个或多个单词,*匹配一个单词。

RabbitMQ安装与测试(Docker方式)_第5张图片

(四)安装与测试

如果你还不会使用Docker可参考我的另一篇博文CentOS7安装及配置Docker。

1.安装

  1. 下载RabbitMQ镜像,management表示带有web管理页面。
docker pull rabbitmq:3-management
  1. 查看下载的镜像。
docker images

结果类似如下:
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
rabbitmq        							3-management       	 e1a73233e3be        11 days ago    	    149 MB
...
  1. 运行RabbitMQ容器,5672是客户端和rabbitmq通信端口,15672是管理界面的web页面端口。
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 容器ID
  1. 查看容器运行情况。
docker ps

2.测试

  1. 打开网页客户端进行登陆,账号【guest】,密码【guest】。
RabbitMQ安装与测试(Docker方式)_第6张图片
  1. 添加 【direct】【faout】【topic】的绑定关系等。如果希望即使在RabbitMQ服务重启的情况下,也不会丢失消息,我们可以将Durability设置为可持久化的(durable)。
RabbitMQ安装与测试(Docker方式)_第7张图片
  1. 添加队列。
RabbitMQ安装与测试(Docker方式)_第8张图片

添加绑定规则

  1. 点击 exchange.direct,添加绑定规则。
RabbitMQ安装与测试(Docker方式)_第9张图片
  1. 点击 exchange.fanout,添加绑定规则。
RabbitMQ安装与测试(Docker方式)_第10张图片
  1. 点击 exchange.topic,添加绑定规则。
    *:代表匹配1个单词
    #:代表匹配0个或者多个单词
RabbitMQ安装与测试(Docker方式)_第11张图片

消息发布测试

  1. 使用exchange.direct发布测试消息。
    RabbitMQ安装与测试(Docker方式)_第12张图片
    可以看到由于是direct方式,则只会有atguigu队列接受到消息。
    RabbitMQ安装与测试(Docker方式)_第13张图片

  2. 使用exchange.fanout发布测试消息,消息与direct发送的一致,路由键仍为atguigu。
    可以看到,由于是使用fanout的方式,每个队列都会收到消息。
    RabbitMQ安装与测试(Docker方式)_第14张图片

  3. 使用exchange.topic发布测试消息,消息与fanout发送的一致,路由键仍为atguigu。可以看到使用topic方式,会对与交换器绑定的队列的路由键进行匹配。参考之前配置的路由键,只有钱三个队列接受到了消息。
    RabbitMQ安装与测试(Docker方式)_第15张图片

你可能感兴趣的:(SpringBoot)