RabbitMQ队列没有生成或者队列生成但是与交换机没有绑定成功解决办法

队列没有生成或者队列生成但是与交换机没有绑定成功解决办法


之前在开发的时候遇到了这个问题,一直没有找到解决方案,后面也是在前辈的指导下知道了这类问题的处理方式,总结下来希望能给大家一点帮助。

1.首先新建两个交换机(x-test,x-textdead)
2.然后新建三条队列(testone,testtwo,testthree)
程序正常启动,队列跟交换机也正常建立,并且绑定关系正常。

3.然后在到shovel建立一条testone的shovel。可以明显的看到testone会有一个消费者在等待消费。而这个消费者,就是shovel为这个队列自动创建的。
这个时候我们将所有队列删除,shovel会自动创建一条名字为testone消费的队列。但是属性会与xml当中配置的textone不一样。

4.这个时候我们重启服务,除了shovel自动建立的testone队列外,其他队列都没有正常建立,并且之前建立的两个交换机也没有出现任何绑定关系

5.将shovel删除,由shovel建立的队列testone也删除,再次重启服务,队列正常建立并且与交换机的绑定关系正常。

总结: 整个流程给大家捋了一遍,其实就是因为之前建立的队列可能由于某种原因删除了,但是队列又绑定了shovel,所以在启动服务时,同一条队列,xml配置的属性与由shovel自动建立时配置的属性发生冲突,从而导致了其他队列建立失败,队列建立失败,绑定关系也自然不会绑定了(当然这里说的冲突也不一定是队列属性的冲突,也有可能是交换机或者其他的)。

这里还有一个需要注意的点,配置在队列的ignore-declaration-exceptions属性,当这个属性声明为true时,在生成队列时,如果发生冲突,会使用已经建立好的队列,并且把冲突信息给吞掉,有可能就会导致在日志看不到异常信息,定位不到问题。

总结的可能不是特别到位,程序员小生还在努力当中,看了我的描述希望能给大家带来一点帮助,嘿嘿

你可能感兴趣的:(RabbitMQ问题)