0

私はかなり長い間 EventMachine を使用してきましたが、It Manage が何も心配する必要がないことをより多く示してくれるので、本当に素晴らしいと思いました。しかし、最近、理解できないこの奇妙な問題を見つけました。

ここで言っていることは

私はこのように見えるEventmachineループを持っています

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

ここで私の操作ブロックは次のようになります(ニンジンgemを使用した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 サーバーが現在実行されているため)。

ありがとう

4

1 に答える 1

0

Aman Gupta が上記の質問に回答しました https://github.com/eventmachine/eventmachine/issues/127#issuecomment-535210

于 2011-06-21T06:55:58.893 に答える