RabbitMQ通过管理页面实现发布与订阅
这里会根据交换机Exchanges的四种类型实现消息发送给队列
注:这里记得给先我们用户授权virtualhost,rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
如果你没有使用过RabbitMQ,建议先部署一下RabbitMQ:RabbitMQ单机部署,然后看一下RabbitMQ管理页面说明
1.fanout
该类型交换机会将消息分发到指定交换机绑定的所有队列上
首先创建一个交换机,type选择fanout
然后创建几个队列
这里我创建了三个
然后点击我们刚创建的交换机进去,点击bindings绑定
将我们三个队列都与我们新创建的交换机进行绑定
然后继续在该界面使用publish message投递消息
然后我们三个队列则都会收到消息
点击队列进去可以查看到我们发的内容
2.route(direct)
该类型交换机需要指定RoutingKey,会将消息发送到匹配的队列中
同样是先创建一个交换机,type选择direct
然后点击该交换机进去,点击bindings绑定,同样是绑定3个队列,但是给每个队列都新增了key选项
然后继续在该界面使用publish message投递消息
可以看到在此处我们写了key为email,这样的话,就会只有queue1收到消息,,queue1的Messages变为了2
3.topic
topic模式其实和route(direct)模式很相似,只不过topic模式属于模糊匹配,route为精确匹配
同样是先创建一个交换机,type选择topic
然后点击该交换机进去,点击bindings绑定,同样是绑定3个队列,并给每个队列赋予key
这里注意编写规则:topic的routingkey可以指定为*.*.com形式,*代表匹配一个单词,#代表可以匹配多个
然后继续在该界面使用publish message投递消息
可以看到我要传递的key规则是匹配queue2队列的,所以该消息将会投递至queue2
4.headers
Headers模式和前面三种匹配方式完全不一样,它不依赖key,而是在绑定队列和交换机的时候指定一个键值对,当交换机在分发消息的时候会先解开消息体里的headers对,如果发现匹配成功,才将消息分发到队列中,这种交换机类型在性能上相对说较差,实际工作中很少使用。
- 从消息性能对比,fanout>direct>topic>headers