Eventmachine :: defer + ruby - PullRequest
       2

Eventmachine :: defer + ruby

0 голосов
/ 22 октября 2010

Я давно пользуюсь EventMachine, и я действительно считаю, что это здорово, потому что Управление показывает мне гораздо больше, что мне не о чем беспокоиться. Но недавно я обнаружил эту странную проблему, которую мне просто не удалосьпонять

Вот что просто говорит

У меня есть цикл Eventmachine, который выглядит так

 EventMachine::run {     
    EventMachine::add_periodic_timer(10) do
         EventMachine::defer(@operation_block,@callback_block)
    end
 } 

здесь мой блок операций выглядит так (код ниже использования amqp с использованием морковного драгоценного камня)

@operation_block = Proc.new {
              begin   
              puts "Initiating the queue"
              @carrot ||= Carrot.new(:host => localhost)
              @queue ||= @carrot.queue("my_queue")
              puts "The Queue is Poping the message"

              if @queue.pop
                  [MY LOGIC HERE]
                  $input_to_callback = "SUCCESS" ## IF LOGIC GET EVALUATED WITHOUT ERROR ELSE WILL SET TO FAIL 
                else
                  $input_to_callback = "NOTHING TO PROCESSES"      
                end  
             rescue 
                puts e
                retry!   
             end    
             $input_to_callback 

          }

Здесь мой блок обратного вызова выглядит как

@callback_block = Proc.new {|operation_block_output|
   if operation_block_output == "SUCCESS"
      puts "YAHOOOOOOOOO SUCCESS"
   elsif operation_block_output == "NOTHING TO PROCESSES"
      puts "BOO Nothing to processes"
   else  
      puts "FAIL ALARM"
   end      
 }

Теперь вот и проблема Код, хотя и работай так, как должно, пока не случится что-то плохое Вот чтоя имел в виду

Теперь предположим, что я запускаю этот код выше

У меня есть имя набора очередей "my_queue", или оно будет создано, если его не существует, очередь изначально пуста

здесь вывод, который я получаю на консоли

Инициирование очереди

Очередь выскакивает сообщение

BOO Ничто не обрабатывает

как я сообщение построилВывод. Изменение в консоли соответственно на основе

Теперь проблема

Если я на мгновение выключу свой сервер AMQP Вот вывод (чтобы показать, что я имел в виду)

Инициированиеочередь

Сломанный канал => Ошибка, возникшая в начале блока восстановления в операционном блоке

Теперь запустите сервер AMQP

Код, кажется, никогда не продвигается вперед от строки, в которойв настоящий момент получено сообщение об ошибке, означающее, что я никогда не вывожу на печать строку

Очередь выдает сообщение

не только текущий отсрочка, для которой произошла повторная попытка, но также и новый блок операции отсрочки, который получаетинициируется после истечения времени таймера, т.е. средства последующего вызова операционного блока, кажется, никогда не продвигаются и выполняют обработку и всегда печатают только следующие выходные данные

Initiating the queue

Просто, кажется, никогда не продвигаются (застряли) ивыполнить обработку, то есть получить сообщение из очереди, выполнить обработку соответствующим образом и все остальное (как служит AMQP).г сейчас работает)

Спасибо

1 Ответ

0 голосов
/ 21 июня 2011

Аман Гупта ответил на вопрос выше https://github.com/eventmachine/eventmachine/issues/127#issuecomment-535210

...