Sha256: bc6d17b23fbf1036ca974d2d08e773e378964fac087164341d712e3654fb4663

Contents?: true

Size: 1.19 KB

Versions: 4

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

require 'aws-sdk-sqs'
require 'concurrent'

module ActiveJob
  module QueueAdapters

    # == Async adapter for Amazon SQS ActiveJob
    #
    # This adapter queues jobs asynchronously (ie non-blocking).  Error handler can be configured
    # with +Aws::Rails::SqsActiveJob.config.async_queue_error_handler+.
    #
    # To use this adapter, set up as:
    #
    # config.active_job.queue_adapter = :amazon_sqs_async
    class AmazonSqsAsyncAdapter < AmazonSqsAdapter

      private

      def _enqueue(job, send_message_opts = {})
        # FIFO jobs must be queued in order, so do not queue async
        queue_url = Aws::Rails::SqsActiveJob.config.queue_url_for(job.queue_name)
        if Aws::Rails::SqsActiveJob.fifo?(queue_url)
          super(job, send_message_opts)
        else
          Concurrent::Promise
          .execute { super(job, send_message_opts) }
          .on_error do |e|
            Rails.logger.error "Failed to queue job #{job}.  Reason: #{e}"
            error_handler = Aws::Rails::SqsActiveJob.config.async_queue_error_handler
            error_handler.call(e, job, send_message_opts) if error_handler
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
aws-sdk-rails-3.6.2 lib/active_job/queue_adapters/amazon_sqs_async_adapter.rb
aws-sdk-rails-3.6.1 lib/active_job/queue_adapters/amazon_sqs_async_adapter.rb
aws-sdk-rails-3.6.0 lib/active_job/queue_adapters/amazon_sqs_async_adapter.rb
aws-sdk-rails-3.5.0 lib/active_job/queue_adapters/amazon_sqs_async_adapter.rb