目的
在类型为 topic 的 exchange 下,设置绑定队列的 routingkey 参数不同时,观察消息的路由情况。
环境
实验室环境的一台正常运行的 Rabbit MQ 服务器。
过程
1 新建一个 Virtual Host ,名称为 test_vhost1 。
$ rabbitmqctl add_vhost test_vhost1
Creating vhost "test_vhost1" ...
2 在名称为 test_vhost1 的下 Virtual Host ,设置名称 admin 用户的权限为可进行任何操作。
$ rabbitmqctl set_permissions -p test_vhost1 admin ".*" ".*" ".*"
Setting permissions for user "admin" in vhost "test_vhost1" ...
3 在名称为 test_vhost1 的 Virtual Hosts 下,新建一个 Exchange 名称为 x.test ,类型为 topic 。
4 在名称为 test_vhost1 的 Virtual Hosts 下,新建五个 Queue 名称分别为 q.1 、q.2 、q.3 、q.4 、q.5 。
4.1 把 x.test 交换机和 q.1 队列进行绑定,设置其 routingkey 为 # 。
4.2 把 x.test 交换机和 q.2 队列进行绑定,设置其 routingkey 为 abc.* 。
4.3 把 x.test 交换机和 q.3 队列进行绑定,设置其 routingkey 为 *.abc 。
4.4 把 x.test 交换机和 q.4 队列进行绑定,设置其 routingkey 为 *.abc.* 。
4.5 把 x.test 交换机和 q.5 队列进行绑定,设置其 routingkey 为 abc 。
4.6 查看交换机的绑定情况
$ rabbitmqctl list_bindings -p test_vhost1 source_name source_kind destination_name destination_kind routing_key arguments
Listing bindings ...
exchange q.1 queue q.1 []
exchange q.2 queue q.2 []
exchange q.3 queue q.3 []
exchange q.4 queue q.4 []
exchange q.5 queue q.5 []
x.test exchange q.1 queue # []
x.test exchange q.2 queue abc.* []
x.test exchange q.3 queue *.abc []
x.test exchange q.4 queue *.abc.* []
x.test exchange q.5 queue abc []
- 在控制台 x.test 交换机的页面下发送一条消息,其 routingkey 是 aaa 。
- 查看结果,发现 q.1 队列能接收到消息。
- 在控制台 x.test 交换机的页面下发送一条消息,其 routingkey 是 abc.a 。
- 查看结果,发现 q.1 和 q.2 能接收到消息。
- 在控制台 x.test 交换机的页面下发送一条消息,其 routingkey 是 abc.ab 。
- 查看结果,发现 q.1 和 q.2 能接收到消息 。
- 在控制台 x.test 交换机的页面下发送一条消息,其 routingkey 是 abc.ad.c 。
- 查看结果,发现 q.1 能接收到消息。
- 在控制台 x.test 交换机的页面下发送一条消息,其 routingkey 是 a.abc。
- 查看结果,发现 q.1 和 q.3 能接收到消息。
- 在控制台 x.test 交换机的页面下发送一条消息,其 routingkey 是 aa.abc.b 。
- 查看结果,发现 q.1 和 q.4 能接收到消息。
- 在控制台 x.test 交换机的页面下发送一条消息,其 routingkey 是 abc 。
- 查看结果,发现 q.1 和 q.5 能接收到消息。
结果
|
q.1 |
q.2 |
q.3 |
q.4 |
q.5 |
---|---|---|---|---|---|
routingkey | # | abc.* | *.abc | *.abc.* | abc |
aaa | ● | - | - | - | - |
abc.a | ● | ● | - | - | - |
abc.ab | ● | ● | - | - | - |
abc.ad.c | ● | - | - | - | - |
a.abc | ● | - | ● | - | - |
aa.abc.b | ● | - | - | ● | - |
abc | ● | - | - | - | ● |
注: ● 表示此队列能接收到消息,- 表示此队列不能接收到消息。
更多实验可点击:Rabbitmq 实验