RabbitMQ 镜像队列和交换
Posted
技术标签:
【中文标题】RabbitMQ 镜像队列和交换【英文标题】:RabbitMQ mirroring queues and exchanges 【发布时间】:2014-05-21 18:01:41 【问题描述】:是否可以使用联合或铲子将一台服务器上的交换和队列的创建镜像到另一台服务器上?
我见过的所有使用铲子和联邦的例子都使用服务器上已经存在的交换和队列。我想做的是在服务器 A 上创建一个交换,并在服务器 B 上重新创建一个联合或铲子,然后开始向它发送消息。
如果使用联合或铲子无法做到这一点,那么在不使用集群的情况下无论如何都可以实现这一点,那么两台服务器之间的连接是不一致的,因此集群是不可能的。
我在 Windows 上运行 RabbitMQ。
【问题讨论】:
需要双向镜像吗? 【参考方案1】:不幸的是,这种方式无法做到这一点,因为连接是点对点连接。您必须将交换与远程交换链接起来,并且在您的拓扑中这不能自动创建。
我过去也遇到过这个问题。我如何解决这个问题是在业务逻辑方面。如果需要“即时”新的 Exchange/Queue,我的数据输入网关会识别到这一点,并在将消息发送到 RabbitMQ 之前,在本地和远程交换上创建新的交换和队列与连接。
【讨论】:
【参考方案2】:您可以使用联邦插件。
它支持交换 exchange 和 queue 联合,为了镜像队列和交换,您可以配置策略(使用管理控制台或命令行),例如使用以下参数:
Name: my_policy
Pattern: ^mirr\. <---- mirror exchanges and queues with prefix “mirr.”
Definition: federation-upstream-set:all
您可以将配置应用于交换和队列,如下所示:
模式策略支持正则表达式
以这种方式,每个以“mirr”开头的新旧交换或队列。将被镜像到其他代理。
我认为这可以解决您的问题。
【讨论】:
顺便说一句,虽然这是一个不错的解决方案,但我会从文档The bindings are sent upstream asynchronously - so the effect of adding or removing a binding is only guaranteed to be seen eventually
中添加以下内容
是的,谢谢@zaq178miami!跟带集群的镜像有很大区别!
联合队列实际上是一个相当新的选择。 @OP:你用的是什么 RabbitMQ 版本?
感谢 Gas,看来我买错了 RabbingMQ 书 :)
不客气 :)!可能你读的书有点旧了。以上是关于RabbitMQ 镜像队列和交换的主要内容,如果未能解决你的问题,请参考以下文章