在RabbitMQ中,有没有一种方法可以像下面的设置一样原子地切换队列的绑定以进行交换。 Q1是& Q2是交替绑定的。在Rabbit MQ中切换路由
X -> Q1
-> Q2
通过交替的基础上结合,它创建的消息将如果Q1 & Q2被一个切换期间同时结合或丢失,如果既不是被复制或者问题。要求是不丢失或重复消息。我意识到丢失消息的窗口将非常小,但我宁愿不处理随之而来的逻辑问题。
切实我想要实现的是从交换X路由到一个队列(Q1或Q2)的形式,而不是让这个一个发布消息的应用程序,它发布到交流X的关注
实现这一目标的一种方式是让消息从中间队列Q中消失,并通过为Q1和Q2分别交换自己的消息来实现切换路由。
这让我感到效率低下,并引入更多移动部件出错。
另一种方法是编写一个自定义交换,当没有队列(X - > Q1或X - > Q2)绑定时,它充当缓冲区/队列,但是我的Erlang不存在。最简单的方法是切换X - > Q1和X - > Q2之间的绑定,但(afaik)没有绑定的原子切换,消息可能会丢失(解除绑定Q1,然后绑定Q2)或重复(绑定Q2,然后取消绑定Q1)。
我能想到的唯一解决方法是在绑定切换之前暂时让交换X不可用(ACL?rename?),并希望客户端处理错误情况。
是否有一个干净的实现这个开箱即用的方式? 如果不是,您会推荐什么方法?
当我通过翻转绑定来破坏切换时,我每隔300毫秒就会丢失大约2000条消息,而每隔300毫秒切换一次。 – Frederik 2014-10-03 11:45:19