我一直在做一个使用 rabbitmq 进行交流的项目。最近我们发现,如果我们使用兔子路由功能,它将具有很大的可扩展性。所以基本上我们将队列绑定到几个路由键并使用带有类型的交换direct
。
它的工作方式类似于发布/订阅。因此可以将队列绑定和取消绑定到不同的事件,以便消费者/订阅者只接收他们感兴趣的消息。
当然,生产者/发布者现在使用绑定键(事件名称)将routing_key
其传递给 pika 实现。但是,当它为不存在的绑定发布某些内容时,消息会丢失,即当没有人为 event 绑定队列时foo
,但一些发布者调用了pika.basic_publish(..., routing_key='foo')
。
所以我的问题是:
是否可以知道消息是否实际发布在队列中?
我试过的:
检查 pika.basic_publish 的返回值。它总是返回
None
。检查当我们尝试为不存在的绑定发布时是否有异常。空无一人。
有一个额外的队列来进行带外控制(因为所有订阅者都由同一个进程运行)。这种方法对我来说并不理想。
附加信息
由于我正在使用此路由功能,因此队列名称是由 rabbit 生成的。如果新方法必须命名队列本身,我没有任何问题。
如果提出了一种需要绑定到交换而不是队列的新方法,我想听听它们,但我更愿意避免它们,因为它们实际上不是 AMQP,而是由 rabbitmq 实现的扩展。
鼠兔版本是 0.9.5
rabbitmq 版本是 2.8
非常感谢