ruby - Bunny::NoFinalOctetError 一段时间后没有消息

标签 ruby rabbitmq bunny

使用安装了 official docker image 的 rabbit mq一段时间后(大约 40 秒),我的工作人员因 Bunny::NoFinalOctetError 异常而失败。

我的 worker 代码是:

require 'bunny'
require 'securerandom'

#TODO set host as parameter
rabbit_conn = Bunny.new
rabbit_conn.start

ch   = rabbit_conn.create_channel
q    = ch.queue("task", :durable => true)
ch.prefetch(1)

begin
  q.subscribe(:manual_ack => true, :block => true) do |delivery_info, properties, body|
        pp body 
    ch.ack(delivery_info.delivery_tag)
  end
rescue Interrupt => _
  rabbit_conn.close
end

我通过以下代码发送数据:

require "bunny"

conn = Bunny.new
conn.start

ch   = conn.create_channel
q    = ch.queue("task", :durable => true)

[
    'titi',
    'toto',
    'tata'
].each do |d|
    q.publish(d, :persistent => true)
end

sleep 1.0
conn.close

大约 40 秒后,我的工作人员得到以下输出

"titi"
"toto"
"tata"
E, [2017-10-18T15:56:55.938661 #28583] ERROR -- #<Bunny::Session:0x56182de41e48 guest@127.0.0.1:5672, vhost=/, addresses=[127.0.0.1:5672]>: Exception in the reader loop: Bunny::NoFinalOctetError: Frame doesn't end with � as it must, which means the size is miscalculated.
E, [2017-10-18T15:56:55.938890 #28583] ERROR -- #<Bunny::Session:0x56182de41e48 guest@127.0.0.1:5672, vhost=/, addresses=[127.0.0.1:5672]>: Backtrace: 
E, [2017-10-18T15:56:55.939037 #28583] ERROR -- #<Bunny::Session:0x56182de41e48 guest@127.0.0.1:5672, vhost=/, addresses=[127.0.0.1:5672]>:     /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/transport.rb:255:in `read_next_frame'
E, [2017-10-18T15:56:55.939114 #28583] ERROR -- #<Bunny::Session:0x56182de41e48 guest@127.0.0.1:5672, vhost=/, addresses=[127.0.0.1:5672]>:     /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/reader_loop.rb:68:in `run_once'
E, [2017-10-18T15:56:55.939175 #28583] ERROR -- #<Bunny::Session:0x56182de41e48 guest@127.0.0.1:5672, vhost=/, addresses=[127.0.0.1:5672]>:     /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/reader_loop.rb:35:in `block in run_loop'
E, [2017-10-18T15:56:55.939233 #28583] ERROR -- #<Bunny::Session:0x56182de41e48 guest@127.0.0.1:5672, vhost=/, addresses=[127.0.0.1:5672]>:     /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/reader_loop.rb:32:in `loop'
E, [2017-10-18T15:56:55.939288 #28583] ERROR -- #<Bunny::Session:0x56182de41e48 guest@127.0.0.1:5672, vhost=/, addresses=[127.0.0.1:5672]>:     /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/reader_loop.rb:32:in `run_loop'
Traceback (most recent call last):
        5: from worker2.rb:21:in `<main>'
        4: from /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/queue.rb:196:in `subscribe'
        3: from /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/consumer_work_pool.rb:77:in `join'
        2: from /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/consumer_work_pool.rb:77:in `each'
        1: from /home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/consumer_work_pool.rb:77:in `block in join'
/home/gg/.rvm/gems/ruby-head/gems/bunny-2.7.1/lib/bunny/consumer_work_pool.rb:77:in `join': caught an unexpected exception in the network loop: Frame doesn't end with � as it must, which means the size is miscalculated. (Bunny::NetworkFailure)

网络更新

我嗅探了网络,因为它似乎是一个格式错误的网络数据包。事实上,错误是在收到特定数据包后触发的。

如下Whireshark抓包,收到299包时出现错误。 enter image description here

但我不知道这个数据包是什么,也不知道为什么 bunny 不处理它。

更新 Github 票证

我开了工单here

最佳答案

原来是数据包解析的问题。

bug可以关注her

关于ruby - Bunny::NoFinalOctetError 一段时间后没有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46812873/

相关文章:

php - 使用脚本处理传入的电子邮件

c# - 当存在 IntegrationEvents 时,Pub/Sub 模式如何解耦微服务

ruby - RabbitMQ/兔子 : subscribe block not called if within a thread

ruby-on-rails - 运动鞋未在 heroku 上接收消息 - RabbitMQ Bigwig

ruby-on-rails - 允许多个模型访问一个 Controller

ruby - 是否可以计算代码执行步骤?

ruby-on-rails - 如何修改 Rails 3 项目中的 gem 文件

windows - 如何使用 docker 容器在浏览器中打开 rabbitmq?

rabbitmq - 在消息传递系统中立即多次重试有什么意义?