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

你可能感兴趣的:(20161024 路由 - direct 交换机)