我正在通过JMeter向我的应用发送大量数据。
我的订阅块和发布商看起来像这样:
BunnyStarter.start_bunny_components
cons = BunnyStarter.queue.subscribe do |delivery_info, metadata, payload|
method_calling ( payload )
cons.cancel
end
BunnyStarter.exchange.publish(body.to_json, routing_key: BunnyStarter.queue.name)
我的BunnyStarter课程:
def self.start_bunny_components
if @@conn.nil?
@@conn = Bunny.new
@@conn.start
@@ch = @@conn.create_channel
@@queue = @@ch.queue("dump_probe_queue")
@@exchange = @@ch.default_exchange
end
end
问题是,虽然我在consumer.cancel
之后调用method_calling
,但在我的Rabbit MQ管理员中,我仍然看到我在大约6分钟内创建了一千个消费者。
这是因为我发送的数据的速率和数量吗?
我该如何改善这个?
答案 0 :(得分:1)
我以前见过这个问题。创建1000个消费者的原因是因为您正在为每个连接创建频道。最终你的消费者会因此而关闭一段时间。
创建消费者的数量不是因为数据而是因为它在消费者中为每个订阅创建一个连接。
<强>解决方案: 而不是创建多个通道,只创建一个通道并使用相同的通道使用多个连接。 我的意思是Connection的一个实例和Model的多个实例,因此您可以为多个模型共享相同的连接。