2013-02-21 4 views
3

J'utilise d'abord send.rb pour envoyer 100 messages à rabbitmq, puis j'utilise rabbitmqctl list_queues pour voir l'état, et il y a 100 messages dans la file d'attente. Ensuite, je commence recv.rb à message de recv, et je reçois en fait 100 messages.Pourquoi rabbitmq a perdu des messages?

Ensuite, je commence recv.rb d'abord, puis utiliser send.rb pour envoyer 100 messages, enfin je ne peux recevoir que 95 messages. J'ai essayé plusieurs fois, et je n'ai jamais reçu 100 messages dans cette situation.

Pourquoi j'ai perdu des messages?

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 

Si je remplace la ligne # A dans

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

les mêmes que RabbitMQ-tutoriels, ce script se bloque:

/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

Pourriez-vous également nous envoyer votre fichier send.rb? Il est difficile de diagnostiquer cette vision d'un seul côté de l'image. – charleyc

Répondre

0

Cela signifie que vous essayons de publier sur une connexion tha t a été fermé. Veuillez publier le script que vous utilisez pour la publication et tous les messages récents que vous avez dans le journal RabbitMQ.

Questions connexes