class Aws::Rails::SqsActiveJob::Executor

def execute(message)

TODO: Consider catching the exception and sleeping instead of using :caller_runs
def execute(message)
  @executor.post(message) do |message|
    begin
      job = JobRunner.new(message)
      @logger.info("Running job: #{job.id}[#{job.class_name}]")
      job.run
      message.delete
    rescue Aws::Json::ParseError => e
      @logger.error "Unable to parse message body: #{message.data.body}. Error: #{e}."
    rescue StandardError => e
      # message will not be deleted and will be retried
      job_msg = job ? "#{job.id}[#{job.class_name}]" : 'unknown job'
      @logger.info "Error processing job #{job_msg}: #{e}"
      @logger.debug e.backtrace.join("\n")
    end
  end
end