使用RabbitMQ时,启动微服务时提示没有某个队列
这个问题是由于先启动消费者微服务导致的,具体来说
- 消费者要监听的队列是在生产者微服务中定义的,生产者启动时会做两件事情
- 在visual host中创建指定队列(如果队列不存在)
- 把队列的Bean注册到Spring容器中
- 如果没有先启动生产者微服务,而是先启动消费者微服务,消费者微服务在启动时会到指定的visual host中查找自己要监听的队列是否存在,如果发现不存在,就会报错
如果你学习过数据结构,就可以像我这样把消息的传递顺序画成一张图,然后按照类似拓扑排序的顺序,依次启动入度为0的微服务,并删除对应的节点和边,如果出现环形,就到rabbitMQ的控制台中手动把环形链路中任意一个微服务监听的队列创建出来,以此来“打破环路”,然后继续依次启动入度为0的微服务