2016-10-26 48 views
0

私は私のrabbitMQからレコードを処理しています。ウサギからのメッセージの損失を避けるために私はウサギを使用しています。テスト目的のために、私はrabbitMQに確認応答を返すコードの直前に例外を発生させました。私が書いたコードに従って、rabbitMQはキューからメッセージを削除してはいけません。つまり、 "c.ack(delivery_info.delivery_tag)"が実行されています。以下はRabbitMq(バニー):キューからメッセージを削除するRabbitmq。承認が機能していない

begin 
MessageService.with_channel do |c| 
    queue = c.queue(QUEUE_NAME, :durable => true) 
    exchange = c.topic(TOPIC_NAME, :durable => true) 
    queue.bind(exchange, :routing_key => "#{ROUTING_KEY_PREFIX}.#") 
    available_messages = queue.message_count 
    processed_messages = 0 
    fact_object = {} 
    while queue.message_count > 0 && processed_messages <= message_limit 
    queue.pop(:manual_ack => true) do |delivery_info, properties, payload| 
     rad_exam_hash_object = JSON.parse(payload) 
     entity_manager,criteria = self.query_revenue_cost_calculation(rad_exam_hash_object) 
     fact_object = self.revenue_cost_calculation_result(entity_manager,criteria) 
     self.insert_data_into_table(fact_object) 
     raise "exception" 
     c.ack(delivery_info.delivery_tag) 
    end 
    processed_messages = processed_messages + 1 
    available_messages = processed_messages - 1 
    end 
    [processed_messages, available_messages,fact_object] 
end 
rescue 
    puts "got exception while processing messages" 
end 

がRabbitMQのはライン「c.ack(delivery_info.delivery_tag)」が実行されていない場合でも、メッセージをキューから削除された理由をundestndingで私を助けてください私のコードです。

答えて

0

免責事項:私はルビーを知らない。 メッセージはキューから削除されています

  • メッセージのTTLが満了した場合、彼らは
  • を認めている場合は、キューが
  • を削除された場合。

そうでなければ、おそらくpopが動作している可能性があります。これは、AMQP getと(チュートリアルに基づいて)subscribeを呼び出していると思われ、AMQPs consumeを呼び出しているようです。

関連する問題