20161024 路由 - direct 交换机

目的

在类型为 direct 的 exchange 下

  1. 绑定两个队列,其绑定的 routingkey 相同。
  2. 绑定两个队列,其绑定的 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,名称为 test_exchange1 ,类型为 direct 

4 在名称为 test_vhost1 的 Virtual Hosts 下新建一个 Queue 名称为 test_queue1 。

  4.1 把 test_exchange1 交换机和 test_queue1 队列进行绑定,设置 routingkey 为 abc 。

  4.2 查看交换机的绑定情况

$  rabbitmqctl list_bindings -p test_vhost1 source_name source_kind destination_name destination_kind routing_key arguments
Listing bindings ...
    exchange    test_queue1 queue   test_queue1 []
test_exchange1  exchange    test_queue1  queue  abc []

  4.3 在控制台 test_exchang1 的页面下发送一条消息,其 routingkey 是 abc。

  4.4 查看结果,发现 test_queue1 队列能收到消息。

5 在名称为 test_vhost1 的 Virtual Hosts 下新建一个名称为 test_queue2 的队列。

   5.1 把 test_exchange1 交换机和 test_queue2 队列进行绑定,设置 routingkey 为 abc。

   5.2 查看交换机绑定情况

$  rabbitmqctl list_bindings -p test_vhost1 source_name source_kind destination_name destination_kind routing_key arguments
Listing bindings ...
    exchange    test_queue1 queue   test_queue1 []
    exchange    test_queue2 queue   test_queue2 []
test_exchange1  exchange    test_queue1  queue  abc []
test_exchange1  exchange    test_queue2  queue  abc []

  5.3 在名称为 test_exchange1 的 Exchange 下发送一条消息,设置其 routingkey 为 abc。

  5.4 查看结果,发现 test_queue1 和test_queue2 队列都能收到消息。

6 在名称为 test_vhost1 的 Virtual Hosts 下新建一个名称为 test_queue3 的队列。

   6.1 把 test_exchange1 交换机和 test_queue2 队列进行绑定,设置 routingkey 为 abcd

   6.2 查看交换机绑定情况

$  rabbitmqctl list_bindings -p test_vhost1 source_name source_kind destination_name destination_kind routing_key arguments
Listing bindings ...
    exchange    test_queue1 queue   test_queue1 []
    exchange    test_queue2 queue   test_queue2 []
    exchange    test_queue3 queue   test_queue3 []
test_exchange1  exchange    test_queue1  queue  abc  []
test_exchange1  exchange    test_queue2  queue  abc  []
test_exchange1  exchange    test_queue3  queue  abcd []

   6.3 在名称为 test_exchange1 的 Exchange 下发送一条消息,设置其 routingkey 为 abc 

   6.4 查看结果,发现只有 routingkey 为 abc 的队列 test_queue1 和 test_queue2 才能收到消息

7 在名称为 test_vhost1 的 Virtual Hosts 下新建一个 Queue, 名称为 test_queue4 。

   7.1 把 test_exchange1 交换机和 test_queue4 队列进行绑定,设置其 routingkey 为 test_queue2

  7.2 查看交换机绑定情况

$  rabbitmqctl list_bindings -p test_vhost1 source_name source_kind destination_name destination_kind routing_key arguments
Listing bindings ...
    exchange    test_queue1 queue   test_queue1 []
    exchange    test_queue2 queue   test_queue2 []
    exchange    test_queue3 queue   test_queue3 []
    exchange    test_queue4 queue   test_queue4 []
test_exchange1  exchange    test_queue1  queue  abc []
test_exchange1  exchange    test_queue2  queue  abc []
test_exchange1  exchange    test_queue3  queue  abcd []
test_exchange1  exchange    test_queue4  queue  test_queue2 []

  7.3 在名称为 test_exchange1 的 Exchange 下发送一条消息,设置其 rouringkey 为 test_queue2

  7.4 查看结果,发现只有队列名为 test_queue4 的队列能接收到消息

结论

在 direct 类型的 Exchange 下:

  • 发送消息时 routingkey 与绑定队列的 routingkey 值相等,该类队列才会收取到消息。
  • 发送消息时 routingkey 与绑定队列的 routingkey 值不相等,而是与绑定的队列名相等,该类队列不会收取到消息。

 

更多实验可点击:Rabbitmq 实验

 

 

 

 

转载于:https://my.oschina.net/u/3568300/blog/3006776

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值