RabbitMQ Timeout :: Error:读取7个字节时的IO超时

时间:2016-08-19 12:31:34

标签: ruby-on-rails rabbitmq bunny

我使用Ubuntu14.04,Rail 5,RabbitMQ(服务器3.6.5),Bunny 2.5.1

我实施了Rabbit来进行服务,并尝试对其进行测试。

我写了下一个ruby脚本:

def rabbit_test
  s_time = Time.current
  10_000.times do |n|
    Mq::RabbitService.new('test_queue').publish(n.to_s)
  end
  p "###############################"
  p "RabbirMQ Diff: #{Time.current - s_time}"
  p "###############################"
end

其中Mq::RabbitService服务包括初始化Bunny,连接,创建队列等

我运行的其他终端

Mq::RabbitService.new('test_queue').subscribe

开始它运作良好,但我只能推送827条消息(我不知道为什么确切地说是837,但它始终是相同的数字)。

之后我的发布商提出错误:

[8] pry(main)> rabbit_test
E, [2016-08-19T15:17:02.445820 #6409] ERROR -- #<Bunny::Session:0x6fb39858 oleg@192.168.1.67:5672, vhost=/, addresses=[192.168.1.67:5672]>: Got an exception when receiving data: IO timeout when reading 7 bytes (Timeout::Error)
Timeout::Error: IO timeout when reading 7 bytes
from /home/oleg/.rvm/gems/ruby-2.3.1/gems/bunny-2.5.1/lib/bunny/cruby/socket.rb:52:in `rescue in read_fully'

我还尝试过:添加具有管理员权限的新用户,尝试添加IP而不是localhost地址(如192.168.0.11),结果相同。

EDITED

我将我的服务用于RabbitMQ连接Mq::RabbitService gist

BUT

def rabbit_test
  s_time = Time.current
  1_000.times do |n|
    connection = Bunny.new(host: '192.168.1.67', port: 5672, user: 'oleg', password: '111111').start
    channel = connection.create_channel
    channel.queue('queue_name', auto_delete: true)
    exchange = channel.default_exchange
    exchange.publish(n.to_s, routing_key: 'queue_name')
    channel.close
  end
  p "###############################"
  p "RabbirMQ Diff: #{Time.current - s_time}"
  p "###############################"
end

也不起作用

也许有人知道我做错了什么?

由于

1 个答案:

答案 0 :(得分:2)

您为每个循环创建一个新连接并保持打开状态。你只关闭频道,这是两个不同的事情。随着旧版本的兔子我遇到了这种方法的问题。在所有通道关闭后,您应该尝试重用连接或关闭它。也许这也可以解决你的问题。