前面有几篇文章简单介绍了一下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 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 Key
是magic
,它与exchange.topic
交换机进行绑定的时候我们绑定的Routing Key
规则是magic.#
,而满足magic.#
这种匹配规则的消息队列除了magic
还有magic.news
和magic.emps
两个,所以此时发送的消息这三个消息队列都收到了。另外我们可以测试一下*.news
这个匹配规则(为了方便查看测试效果,我将队列中的消息都清空了):
同样点击进入exchange.topic
交换机页面,然后发送消息:
然后进入Queues
页面:
发现所有的消息队列都收到了消息,分析原因:
magic.news
首先满足magic.#
匹配规则,同时又满足*.news
匹配规则,所以四个消息队列都收到了消息,如果我们只想匹配*.news
这种规则的消息队列,则可以通过下面这种形式进行消息的发送:
然后进入Queues
消息队列页面:
发现只有两个以.news
结尾的消息队列收到了消息。这种结果是符合预期的,因为4种消息队列中只有magic.news
和javamagic.news
两种消息队列满足.news
匹配规则。