RabbitMQ中的4种交换机消息发送机制测试

在这里插入图片描述
前面有几篇文章简单介绍了一下RabbitMQ的基础概念:

一、RabbitMQ基础概念详解

二、RabbitMQ、ActiveMQ、Kafka之间的比较

  它是一款基于Erlang语言开发得开源消息中间件,目前被大量应用于企业级得开发中,我目前就职的公司使用的消息中间件也是RabbitMQ,所以还是打算写个笔记再炒一下RabbitMQ的剩饭。

一、安装RabbitMQ

1.进入dockerHub官网搜索rabbitmq的镜像包:

https://hub.docker.com/_/rabbitmq?tab=tags

2.选择带有management标签的镜像包,这种镜像包带有web管理界面,
在这里插入图片描述

在linux中输入下面命令拉取该版本的镜像包:

docker pull rabbitmq:3-management

拉取镜像包结束之后,再输入命令docker images查看rabbitmq镜像包是否已经成功下载了
在这里插入图片描述
确定镜像包获取成功之后,输入以下命令启动rabbitmq服务(如果对于docker的命令不太熟悉可以查看一下另外一篇文章:

Docker常用命令

docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 95bc78c8d15d(这个是IMAGE ID)

-d:后台启动
-p:暴露端口
--name:自定义启动的服务名称
5672:客户端通信端口
15672:管理界面端口

然后输入命令查看rabbitmq服务是否启动成功:

docker ps

在这里插入图片描述
确认服务启动成功之后,我们在浏览器中输入rabbitmq所在的服务器地址:15672就可以访问rabbitmq的web管理页面了:
在这里插入图片描述
使用默认的账号:guest和默认的密码:guest登录此管理面板:

在这里插入图片描述

二、测试RabbitMQ的路由机制

  在另外一篇文章中:RbbitMQ基础概念详解中有介绍RabbitMQ中的消息路由一般通过4种交换机来实现:

​ 1.)Direct exchange 直连交换机

​ 2.)Fanout exchange 扇形交换机

​ 3.)Topic exchange 主题交换机

​ 4.)Headers exchange 首部交换机

  对于4种交换机得介绍这里就不再赘述了,其中Headers exchage交换机并不是使用得路由键进行判断,而是使用AMQP这种高级消息队列协议来进行判断。在实际应用中,Headers exchange使用的并不算多,所以这里主要测试前三种类型交换机。

1.添加交换机

在这里插入图片描述
  分别添加好3种类型的交换机:

在这里插入图片描述

2.添加消息队列

在这里插入图片描述
  分别添加好消息队列

在这里插入图片描述

3.将交换机与消息队列进行绑定

在这里插入图片描述
  然后继续将该交换机与添加得其他几个消息队列进行绑定,最终绑定结束后,绑定关系如下:
在这里插入图片描述
  使用相同得方式,将剩余得2种交换机与新添加得4个消息队列进行绑定……

  这里需要注意得是exchange.topic这种交换机与消息队列得绑定,以为此种交换机可以进行模糊匹配,所以它与消息队列得绑定形式如下:

在这里插入图片描述
  绑定工作完成之后,我们可以在RabbitMQ的管理面板上发一下消息测试一下:

4.在web管理面板上发消息进行测试

4.1 首先测试exchange.direct交换机

  首先测试exchange.direct交换机,点击进入该交换机,然后发消息进行测试:

在这里插入图片描述
  然后点击进入Queues页面:

在这里插入图片描述
  由于exchange.direct是完全匹配的,所以只有magic队列收到了消息,此时我们点击列表中的magic消息队列:
在这里插入图片描述
  点击Get Messages可以获取该消息队列收到的消息

4.2 测试exchange.fanout交换机

  点击进入exchange.fanout交换机的页面,然后发送消息:

在这里插入图片描述
  然后点击进入Queues消息队列页面,发现与exchange.fanout交换机绑定的4个消息队列都收到了消息,这也是exchange.fanout为什么被称为“扇形交换机”的原因,因为它非常像一个喇叭,它以“广播”的形式与消息队列进行匹配发送。
在这里插入图片描述
4.3 测试exchange.topic交换机

  点击进入exchange.topic交换机页面,选择Routing key(路由键),并发送消息:

在这里插入图片描述
  然后点击Queues进入消息队列页面:

在这里插入图片描述
  我们发现以magic开头的消息队列收到消息的数量都+1了,这种交换机就是对路由键进行了模糊匹配,我们发送消息的时候选择的Routing Keymagic,它与exchange.topic交换机进行绑定的时候我们绑定的Routing Key规则是magic.#,而满足magic.#这种匹配规则的消息队列除了magic还有magic.newsmagic.emps两个,所以此时发送的消息这三个消息队列都收到了。另外我们可以测试一下*.news这个匹配规则(为了方便查看测试效果,我将队列中的消息都清空了):

  同样点击进入exchange.topic交换机页面,然后发送消息:

在这里插入图片描述

  然后进入Queues页面:

在这里插入图片描述
  发现所有的消息队列都收到了消息,分析原因:

  magic.news首先满足magic.#匹配规则,同时又满足*.news匹配规则,所以四个消息队列都收到了消息,如果我们只想匹配*.news这种规则的消息队列,则可以通过下面这种形式进行消息的发送:
在这里插入图片描述
  然后进入Queues消息队列页面:

在这里插入图片描述
  发现只有两个以.news结尾的消息队列收到了消息。这种结果是符合预期的,因为4种消息队列中只有magic.newsjavamagic.news两种消息队列满足.news匹配规则。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章