Sha256: 171846846aba217331f6fec94284ec8345129c4d6dc922253792d70f096e04c6

Contents?: true

Size: 1.1 KB

Versions: 4

Compression:

Stored size: 1.1 KB

Contents

module Outboxable
  class PollingPublisherWorker
    include Sidekiq::Job

    def perform
      Outboxable.configuration.orm == :mongoid ? perform_mongoid : perform_activerecord
    end

    def perform_activerecord
      Outbox.pending.where(last_attempted_at: [..Time.zone.now, nil]).find_in_batches(batch_size: 100).each do |batch|
        batch.each do |outbox|
          # This is to prevent a job from being retried too many times. Worst-case scenario is 1 minute delay in jobs.
          ::Outboxable::Worker.perform_async(outbox.id)
          outbox.update(last_attempted_at: 1.minute.from_now, status: :processing, allow_publish: false)
        end
      end
    end

    def perform_mongoid
      Outbox.pending.any_of({ last_attempted_at: ..Time.zone.now }, { last_attempted_at: nil }).each do |outbox|
        # This is to prevent a job from being retried too many times. Worst-case scenario is 1 minute delay in jobs.
        ::Outboxable::Worker.perform_async(outbox.idempotency_key)
        outbox.update(last_attempted_at: 1.minute.from_now, status: :processing, allow_publish: false)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
outboxable-1.0.6 lib/outboxable/polling_publisher_worker.rb
outboxable-1.0.5 lib/outboxable/polling_publisher_worker.rb
outboxable-1.0.4 lib/outboxable/polling_publisher_worker.rb
outboxable-1.0.3 lib/outboxable/polling_publisher_worker.rb