RabbitMQ DeclareQueue和DeclareBind Slow

时间:2012-03-18 05:34:01

标签: c# rabbitmq

在BasicPublish()或BasicConsume()等操作之前建议使用DeclareQueue()和DeclareBind(),因为配置是幂等的。它确实以这种方式运行,但缺点似乎是从我的机器上的每秒15k消息到1.5k的性能下降。似乎没有关于变通方法的明确文档。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我对这个建议的表现影响很感兴趣。我没有为自己尝试过,但我并不感到惊讶,虽然10倍的因素很有影响力。

无论如何,我们选择忽略这个建议,转而使用实用程序脚本根据XML中的定义创建和绑定队列。在将代码库部署到目标交换之前,我们的构建服务器将对目标交换执行该实用程序。 队列本身在队列定义XML文件中定义,然后我们使用app.config作为配置实用程序来保存交换,主机和虚拟主机信息,以便我们可以利用XML转换(使用慢速猎豹)转换构建特定版本的输出。 这种方法允许我们将交换配置与我们的代码库同步,而不会受到常量队列和绑定声明的影响。

希望这会有所帮助。 史蒂夫

答案 1 :(得分:1)

每次调用declare,bind和consume时,都必须与服务器通信,因此每次发布或获取消息时都要这样做会对您的进程产生一定程度的影响。

参考Java tutorials,每个示例在每个生产者和消费者的生命周期中仅为队列声明和绑定一次,因此我不确定您在哪里可以看到此指南。

也就是说,可以从您的下方删除交换或队列。如果这是一个问题,您可以使用错误处理来重新声明交换,队列和绑定,以确保此类事件不会使您的应用程序崩溃。