2016-08-19 40 views
1

我使用Ubuntu14.04,轨5,RabbitMQ的(服务器3.6.5)时,兔子2.5.1RabbitMQ的超时::错误:IO超时读7个字节

我实现兔至者地位,并试图测试它。

我写了下一个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服务包括初始化兔子,连接,创建队列等

它的其他终端我跑

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 [email protected]: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

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 

不工作太

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

谢谢

+0

您是否自己创建'Mq :: RabbitService'或者它是宝石?如果是你自己的班级,你可以把这个课程的要点连接起来吗? – slowjack2k

+0

您可以在编辑标记 –

+1

后检查它是否可以将连接移到循环之外?不确定它是否与问题有关,但为什么每次都创建一个新的连接? – theMayer

回答

2

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

+0

正如我在** EDITED **中发布的,当我在'publish'后关闭连接时,我有同样的结果 –

+3

您不关闭连接。您关闭频道。这是不同的事情。 – slowjack2k

+0

谢谢你对 –