【发布时间】:2019-08-20 18:09:22
【问题描述】:
所以我正在使用 RabbitMq 和 Python 3.7 进行项目。我首先使用 Pika,但后来我切换到 rabbitpy,因为它是线程安全的,并且我们在项目中使用 Multithreading。我查看了 rabbitpy 的文档,我真的很喜欢这个 API,所以上次我在项目中添加了 强制发布 功能,但发生了一些有趣的事情。
当我订阅然后发布消息时,一切正常。这意味着如果在发布之前已经声明了消费者队列,那么它工作得很好但是如果我尝试在订阅 rabbitpy 之前发布这个异常:NO_ROUTE(312)
在我添加 Mandatory=True 参数之前,一切对我来说都很好。所以我不明白幕后发生了什么,老实说,rabbitpy Docs 并不是最好的,也没有多少人在他们的项目中使用它,这就是为什么互联网上没有太多示例的原因。这就是为什么我希望有人已经有了这个并以某种方式修复它。我知道我可以轻松删除 Mandatory 参数,然后一切都会很好,但我喜欢 Mandatory Publishing 的想法,因为它会指示 Rabbitmq 是否已收到已发布的 msg,因此我可以通过它监视我的消息。现在这就是我从文档中了解到的,但正如我提到的那样,rabbitpy 的文档没有得到很好的解释(至少对我而言),所以如果有人对强制发布以及即时论点有一些意见或理解,这将使我的一天变得更好听到任何解释。这是提及rabbitpy_mandatory 的文档的链接。我使用的代码示例与文档中的代码基本相同,这就是为什么我不会添加一些代码并混淆的原因。
PS:另一个可能有助于调试问题的信息是我正在使用多线程。所以我在 Main 中创建了一个 rabbitpy Connection 对象,然后我为每个线程分配了一个独立的 Channel。所以线程共享连接但不共享通道。这应该没问题,因为在使用强制发布之前它已经对我有用,但我只是将它作为信息添加,也许它会在最后有所帮助
【问题讨论】:
标签: python multithreading rabbitmq publish-subscribe rabbitpy