Module: Activerecord::Oracle::Queue::Watcher::ClassMethods

Defined in:
lib/activerecord/oracle/queue/watcher.rb

Instance Method Summary collapse

Instance Method Details

#watchObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/activerecord/oracle/queue/watcher.rb', line 30

def watch
  Rails.logger = Logger.new(STDOUT)
  connection   = fetch_connection
  cursor       = fetch_cursor(connection)

  cursor.bind_param(":p", nil, String, 4000)

  Rails.logger.info(log_message("Starting watching queue #{self::QueueName}"))

  while true
    cursor.exec() # retrieve message

    begin
      Rails.logger.info(log_message("Retrieve message with #{cursor[":p"]}"))
      json     = ActiveSupport::JSON.decode(cursor[":p"])
      instance = self.new

      Rails.logger.info(log_message("Perform with #{cursor[":p"]}"))

      instance.perform(json)
    rescue JSON::ParserError => exception
      Rails.logger.error(log_message(exception))
    end

    connection.commit # remove from AQ.  dequeue isn't complete until this happens
    Rails.logger.info(log_message("Perform is done... Dequeueing..."))
  end
end