RabbitMq(bunny): Rabbitmq удаляет сообщение из очереди. подтверждение не работает

Я обрабатываю записи из моего rabbitMQ. чтобы избежать потери сообщений от rabbitMQ, я использую стратегию подтверждения RabbitMQ. В целях тестирования я вызвал исключение непосредственно перед кодом, в котором я дал подтверждение RabbitMQ. согласно коду, который я написал, rabbitMQ не должен удалять сообщение из очереди, пока не будет выполнена строка в моем коде, т.е. «c.ack (delivery_info.delivery_tag)». Ниже мой код

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)" не выполняется.


person Sanjay Salunkhe    schedule 26.10.2016    source источник


Ответы (1)


Отказ от ответственности: я не знаю рубин. Сообщения удаляются из очереди:

  • если очередь удалена
  • если они будут признаны
  • если TTL сообщения истекает.

Так что, если дело не в этом, возможно, дело в том, как работает pop. Похоже, что это вызывает AMQP get и (судя по руководствам) subscribe, кажется, вызывает AMQP consume.

person cantSleepNow    schedule 26.10.2016