RabbitMQ中的多个联合策略

时间:2014-10-16 08:58:33

标签: rabbitmq message-queue

我有一些有效排列在星形拓扑中的RabbitMQ服务器。我需要在中央集线器服务器和每个外部服务器之间双向联合一个不同的交换机。外部服务器的配置没有问题,但是虽然交换机不同,但集线器不希望接受多个联合策略。

定义多个上游和上游集按预期工作:

$ rabbitmqctl list_parameters
Listing runtime parameters ...
federation-upstream-set leaf1      [{"upstream":"leaf1-1"}]
federation-upstream-set leaf2 [{"upstream":"leaf2-1"}]
federation-upstream     leaf2-1      {"uri":"--snipped--","expires":3600000}
federation-upstream     leaf1-1   {"uri":"--snipped--","expires":3600000}
...done.

第一个联合政策适用于预期:

$ rabbitmqctl set_policy --apply-to exchanges federate-me "^leaf1$" '{"federation-upstream-set":"leaf1"}'
Setting policy "federate-me" for pattern "^leaf1$" to "{\"federation-upstream-set\":\"leaf1\"}" with priority "0" ...
...done.
$ rabbitmqctl list_policies
Listing policies ...
/       federate-me     exchanges       ^leaf1$        {"federation-upstream-set":"leaf1"}   0
...done.

但是一旦我尝试指定第二个联合策略,它就会替换第一个联合策略:

$ rabbitmqctl set_policy --apply-to exchanges federate-me "^leaf2$" '{"federation-upstream-set":"leaf2"}'
Setting policy "federate-me" for pattern "^leaf2$" to "{\"federation-upstream-set\":\"leaf2\"}" with priority "0" ...
...done.
$ rabbitmqctl list_policies
Listing policies ...
/       federate-me     exchanges       ^leaf2$        {"federation-upstream-set":"leaf2"}   0
...done.

如果我为两个政策指定不同的优先级也无关紧要;无论我做什么,只列出最近输入的单个联邦政策。我知道只有一个策略可以应用于每个交换,但是这里每个策略的交换规范是不同的,而且文档建议具有最高优先级的策略应该在有多个匹配策略的情况下获胜。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

您必须为要添加的每个策略指定唯一名称。使用现有名称设置不同的策略只会覆盖具有该名称的现有策略。