3

最初に send.rb を使用して 100 個のメッセージを rabbitmq に送信し、次に使用rabbitmqctl list_queuesしてステータスを確認すると、100 個のメッセージがキューに入っています。次に、recv.rb を起動してメッセージを受信すると、実際に 100 件のメッセージが表示されます。

次に、最初に 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-tutorials と同じように、このスクリプトはクラッシュします。

 /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>'
4

1 に答える 1

0

これは、閉じられた接続を介して公開しようとしていることを意味します。パブリッシュに使用するスクリプトと、RabbitMQ ログにある最近のメッセージを投稿してください。

于 2013-02-21T09:40:42.647 に答える