2013-01-04 45 views
0

我有一个有两个节点的rabbitmq集群。我想创建一些队列以在node1上托管,并在node2上托管其他队列。Pika和RabbitMQ - 在特定节点上创建队列

即使我将ConnectionParameters中的主机设置为node2,队列仍然会在node1上创建。

以编程方式,我不知道如何使用pika指定我想要创建队列的节点。有没有这样的参数在queue_declare,并传递这样的说法似乎不工作:

channel.queue_declare(queue="whereami", durable=True, exclusive=False, auto_delete=False, callback=on_queue_declared, arguments= {'node':'[email protected]'}) 

是否有指定的主节点的任何接口?有另一种方法来处理这种情况?

谢谢!

回答

1

我找不到任何参数来指定创建群集队列中的哪个节点,但我有一个步骤来解决这个问题。假设你在集群兔@ node1和兔@节点2的两个节点,你可以简单地指定:

arguments["x-ha-policy"] = "nodes" 
arguments["x-ha-policy-params"] = '[email protected]' 

这一次将创建队列,将残留物只在节点1。

0

集群通常定义在不同的主机上,或者在同一主机上有不同的端口(see docs for more on this)。

可以将主机和端口号都定义为pika.connection.ConnectionParameters的一部分。

+0

这不起作用。它仍将连接到整个群集并在主服务器上创建主机。就像,如果我在群集中有节点1和节点2并连接到ConnectionParameters中的节点2,它仍然会在节点1上创建队列。 queue_declare本身必须有一些东西。 –

+0

你可以对你的集群设置更具体一点吗? 1.这些节点是在单独的物理机器上还是在具有不同端口的同一台机器上? 2.它们是否配置为具有主动/主动或主动/被动设置的高可用性? – bitcycle

+0

当然!它们位于两台独立的物理机器上,都是磁盘节点。它们未配置为实现高可用性。基本上,两个不同的业务组使用两个不同的节点。他们聚集在一起,让他们分享相同的交流。保持队列分开意味着,如果一个组的程序停止确认邮件,它只会在队列填满并吃掉磁盘空间时影响该组。 –