module Qs::DispatchJobHandler::InstanceMethods
Attributes
event[R]
subscribed_queue_names[R]
Public Instance Methods
init!()
click to toggle source
# File lib/qs/dispatch_job_handler.rb, line 20 def init! @event = Qs::DispatchJob.event(job) @subscribed_queue_names = Qs.event_subscribers(@event) @qs_failed_dispatches = [] end
run!()
click to toggle source
# File lib/qs/dispatch_job_handler.rb, line 26 def run! logger.info "Dispatching #{self.event.route_name}" logger.info " params: #{self.event.params.inspect}" logger.info " publisher: #{self.event.publisher}" logger.info " published at: #{self.event.published_at}" logger.info "Found #{self.subscribed_queue_names.size} subscribed queue(s):" self.subscribed_queue_names.each do |queue_name| qs_dispatch(queue_name, self.event) end qs_handle_errors(self.event, @qs_failed_dispatches) end
Private Instance Methods
qs_dispatch(queue_name, event)
click to toggle source
# File lib/qs/dispatch_job_handler.rb, line 40 def qs_dispatch(queue_name, event) Qs.push(queue_name, Qs::Payload.event_hash(event)) logger.info " => #{queue_name}" rescue StandardError => exception logger.info " => #{queue_name} (failed)" @qs_failed_dispatches << FailedDispatch.new(queue_name, exception) end
qs_handle_errors(event, failed_dispatches)
click to toggle source
# File lib/qs/dispatch_job_handler.rb, line 48 def qs_handle_errors(event, failed_dispatches) return if failed_dispatches.empty? logger.info "Failed to dispatch the event to " \ "#{failed_dispatches.size} subscribed queues" descriptions = failed_dispatches.map do |fail| exception_desc = "#{fail.exception.class}: #{fail.exception.message}" logger.info "#{fail.queue_name}" logger.info " #{exception_desc}" logger.info " #{fail.exception.backtrace.first}" "#{fail.queue_name} - #{exception_desc}" end message = "#{event.route_name} event wasn't dispatched to:\n" \ " #{descriptions.join("\n ")}" raise DispatchError.new(message, failed_dispatches) end