私は私の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で私を助けてください私のコードです。