2013-02-21 162 views
3

我首先使用send.rb向rabbitmq發送100條消息,然後使用rabbitmqctl list_queues來查看狀態,並且它是100條隊列中的消息。然後我開始recv.rb recv消息,我實際上得到100個消息。爲什麼rabbitmq丟失消息?

然後,我先啓動recv.rb,然後用send.rb發送100條消息,最後我只能得到95條消息。我嘗試了很多次,在這個場合我從來沒有收到過100封郵件。

爲什麼我迷失信息?

recv.rb

require 'amqp' 

AMQP.start(:host => '127.0.0.1') do |connection| 
    channel = AMQP::Channel.new(connection) 
    queue = channel.queue("test_queue", :durable => true) 

    Signal.trap("INT") do 
    connection.close do 
     EM.stop { exit } 
    end 
    end 

    channel.prefetch(1) 

    queue.subscribe(:ack => true) do |header, body| 
    puts body 
    header.ack # A 
    end 
end 

如果我更換# A行成

EM.add_timer(body.count(".")) do 
     puts " [x] Done" 
     header.ack 
    end 

一樣的RabbitMQ-教程,這個腳本崩潰:

/usr/local/lib/ruby/gems/1.9.1/gems/amq-client-0.9.10/lib/amq/client/async/adapter.rb:247:in `send_frame': Trying to send frame through a closed connection. Frame is #<AMQ::Protocol::MethodFrame:0x000000019dc6e0 @payload="\x00<\x00P\x00\x00\x00\x00\x00\x00\x00\x03\x00", @channel=2> (AMQ::Client::ConnectionClosedError) 
    from /usr/local/lib/ruby/gems/1.9.1/gems/amq-client-0.9.10/lib/amq/client/async/channel.rb:138:in `acknowledge' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/amqp-0.9.8/lib/amqp/channel.rb:1003:in `acknowledge' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/amqp-0.9.8/lib/amqp/header.rb:35:in `ack' 
    from recv.rb:22:in `block (3 levels) in <main>' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `call' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run_machine' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/amqp-0.9.8/lib/amqp/connection.rb:38:in `start' 
    from recv.rb:5:in `<main>' 
+0

你可以發佈你的send.rb嗎?只看到照片的一面很難診斷。 – charleyc 2013-02-21 08:24:35

回答

0

這意味着你正試圖通過連接發佈t已關閉。請發佈您用於發佈的腳本以及您在RabbitMQ日誌中收到的任何最新消息。