1

我正在通过 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 分钟内创建了 1000 个消费者。

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

我该如何改进呢?

4

1 回答 1

1

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

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

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

于 2016-09-06T16:57:19.633 回答