2016-07-07 91 views
0

我通过JMeter向我的应用发送大量数据。兔子MQ(兔子)中的消费者太多

我的订阅块和出版商是这样的:

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.cancelmethod_calling后,在我的兔子MQ管理我仍然看到我在大约6分钟内创建了1000个消费者。

这是因为我发送的数据的速率和数量?

我该如何改进?

回答

0

我以前看过这个问题。它创建1000个消费者的原因是因为您正在为每个连接创建频道。因此,最终你的消费者会在一段时间后关闭。

创建消费者的数量并不是因为数据,而是因为它在消费者中为每个订阅创建一个连接。

解决方案: 除了创建多个通道,只创建一个通道并使用同一通道的连接数量。 我的意思是连接的一个实例和Model的多个实例,因此您可以共享多个模型的相同连接。