我还没有找到一种方法来确定发布者何时由于tcp背压(流量控制)而挂起。对于我的应用程序来说,挂起任何线程都是非常不可接受的。如果发布操作不能快速执行,我需要能够中止发布操作。我注意到Pika客户端对此有一个回调,但在c#客户端文档中找不到任何东西。有人有解决这个问题的办法吗?我可以创建一个后台任务来执行发布,并在超时后中止线程,但这似乎很繁重,而且thread.abort也有自己的问题。
发布于 2012-02-19 10:06:39
RabbitMQ从显式的流量控制切换到通过TCP背压进行节流的原因是为了支持更多的客户端(其中许多客户端无法处理像channel.flow这样的异步方法)。不幸的是,它的完成方式,也可以说是应该完成的方式,对出版商来说是完全透明的--出版商没有办法知道它何时被扼杀了。
如果你真的有一个硬实时的发布保证,你唯一的选择就是实现一个手动超时。当然,这并不能解决RabbitMQ过载的根本问题,所以停止发布、终止连接并打开一个新连接不会让您再次接近发布。
因此,您要么1)需要修改发布为什么需要如此严格的保证,要么2)向RabbitMQ cluster添加更多节点(这非常简单,旨在改善这种情况)。
https://stackoverflow.com/questions/9316566
复制相似问题