require "active_job/continuable" class Event::WebhookDispatchJob < ApplicationJob include ActiveJob::Continuable queue_as :webhooks discard_on ActiveJob::DeserializationError def perform(event) step :dispatch do |step| Webhook.active.triggered_by(event).find_each(start: step.cursor) do |webhook| webhook.trigger(event) step.advance! from: webhook.id end end end end