RabbitMQ镜像队列和交换机

8
有没有可能使用联邦或铲子将一个服务器上的交换机和队列的创建镜像到另一个服务器上?
所有我看过的使用铲子和联邦的例子都是使用已经存在于服务器上的交换机和队列。我的要求是在服务器A上创建一个交换机,并通过联邦或铲子重新在服务器B上创建它,然后开始向其发送消息。
如果不能使用联邦或铲子来实现此操作,是否有其他方式可以实现而不使用群集?两个服务器之间的连接不连续,因此无法使用群集。我正在Windows上运行RabbitMQ。

你需要一面双向镜吗? - Gabriele Santomaggio
2个回答

11

您可以使用联合插件。

它支持交换exchangequeue的联合,为了镜像队列和交换,您可以配置策略(使用管理控制台或命令行),例如使用以下参数:

Name: my_policy 
Pattern: ^mirr\.  <---- mirror exchanges and queues with prefix “mirr.” 
Definition: federation-upstream-set:all 

您可以按以下方式应用交换机和队列的配置:

enter image description here

模式策略支持正则表达式

通过这种方式,每个以前缀“mirr.”开头的新的或旧的交换机或队列都会被镜像到其他代理。

我认为这可以解决您的问题。


1
顺便提一下,虽然这是一个很棒的解决方案,但我会从文档中添加以下内容:“绑定是异步发送到上游的 - 因此添加或删除绑定的效果只有在最终才能得到保证”。 - pinepain
1
是的,谢谢@zaq178miami!与集群镜像相比,这是一个很大的区别! - Gabriele Santomaggio
联合队列实际上是一个相当新的选项。@OP:您使用的是哪个RabbitMQ版本? - Sigi
1
谢谢Gas,看起来我买了错误的RabbingMQ书籍 :) - user1450877
1
不客气 :)!也许你正在阅读的书有点旧了。 - Gabriele Santomaggio
交换机/队列已经被创建,但是一个队列通常会与一个交换机绑定,而这个绑定并没有被重新创建。例如:rabbit1: Ex1 <- Q1,rabbit2: Ex1 (未绑定) Q1,rabbit2 上的 Q1 是从 rabbit1 联合创建的,并且自动创建了,但是与 Ex1 的绑定缺失了,你该如何解决? - Oleg Majewski

2
很遗憾,以这种方式无法实现此操作,因为连接是点对点的。您必须将一个交换机与远程交换机连接起来,在您的拓扑结构中无法自动创建此连接。
我过去也遇到过这个问题。我是通过业务逻辑方面解决的。如果需要“即时”新建一个Exchange/Queue,我的数据输入网关会识别此需求,并在本地和远程交换机上创建新的Exchange和队列,然后在消息发送到RabbitMQ之前进行连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接