Class: RailsTransactionalOutbox

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_transactional_outbox.rb,
lib/rails_transactional_outbox/runner.rb,
lib/rails_transactional_outbox/monitor.rb,
lib/rails_transactional_outbox/railtie.rb,
lib/rails_transactional_outbox/tracers.rb,
lib/rails_transactional_outbox/version.rb,
lib/rails_transactional_outbox/event_type.rb,
lib/rails_transactional_outbox/health_check.rb,
lib/rails_transactional_outbox/outbox_model.rb,
lib/rails_transactional_outbox/configuration.rb,
lib/rails_transactional_outbox/error_handlers.rb,
lib/rails_transactional_outbox/reliable_model.rb,
lib/rails_transactional_outbox/latency_tracker.rb,
lib/rails_transactional_outbox/null_lock_client.rb,
lib/rails_transactional_outbox/record_processor.rb,
lib/rails_transactional_outbox/record_processors.rb,
lib/rails_transactional_outbox/exponential_backoff.rb,
lib/rails_transactional_outbox/tracers/null_tracer.rb,
lib/rails_transactional_outbox/outbox_entry_factory.rb,
lib/rails_transactional_outbox/runner_sleep_interval.rb,
lib/rails_transactional_outbox/tracers/datadog_tracer.rb,
lib/rails_transactional_outbox/datadog_latency_reporter.rb,
lib/rails_transactional_outbox/outbox_entries_processor.rb,
lib/rails_transactional_outbox/outbox_entries_processors.rb,
lib/rails_transactional_outbox/datadog_latency_reporter_job.rb,
lib/rails_transactional_outbox/record_processors/base_processor.rb,
lib/rails_transactional_outbox/reliable_model/reliable_callback.rb,
lib/rails_transactional_outbox/error_handlers/null_error_handler.rb,
lib/rails_transactional_outbox/datadog_latency_reporter_scheduler.rb,
lib/rails_transactional_outbox/outbox_entries_processors/base_processor.rb,
lib/rails_transactional_outbox/record_processors/active_record_processor.rb,
lib/rails_transactional_outbox/reliable_model/reliable_callbacks_registry.rb,
lib/rails_transactional_outbox/outbox_entries_processors/non_ordered_processor.rb,
lib/rails_transactional_outbox/outbox_entries_processors/ordered_by_causality_key_processor.rb

Defined Under Namespace

Modules: OutboxModel, ReliableModel, Tracers, Version Classes: Configuration, DatadogLatencyReporter, DatadogLatencyReporterJob, DatadogLatencyReporterScheduler, ErrorHandlers, EventType, ExponentialBackoff, HealthCheck, LatencyTracker, Monitor, NullLockClient, OutboxEntriesProcessor, OutboxEntriesProcessors, OutboxEntryFactory, Railtie, RecordProcessor, RecordProcessors, Runner, RunnerSleepInterval

Constant Summary collapse

VERSION =
"1.2.0"

Class Method Summary collapse

Class Method Details

.configurationObject



23
24
25
# File 'lib/rails_transactional_outbox.rb', line 23

def self.configuration
  @configuration ||= RailsTransactionalOutbox::Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



27
28
29
# File 'lib/rails_transactional_outbox.rb', line 27

def self.configure
  yield configuration
end

.enable_outbox_worker_healthcheckObject



43
44
45
46
47
# File 'lib/rails_transactional_outbox.rb', line 43

def self.enable_outbox_worker_healthcheck
  monitor.subscribe("rails_transactional_outbox.started") { outbox_worker_health_check.register_heartbeat }
  monitor.subscribe("rails_transactional_outbox.stopped") { outbox_worker_health_check.worker_stopped }
  monitor.subscribe("rails_transactional_outbox.heartbeat") { outbox_worker_health_check.register_heartbeat }
end

.loaderObject



14
15
16
17
18
19
20
21
# File 'lib/rails_transactional_outbox.rb', line 14

def self.loader
  @loader ||= Zeitwerk::Loader.for_gem.tap do |loader|
    loader.ignore(
      "#{__dir__}/rails-transactional-outbox.rb",
      "#{__dir__}/tracers/datadog_tracer.rb"
    )
  end
end

.monitorObject



31
32
33
# File 'lib/rails_transactional_outbox.rb', line 31

def self.monitor
  @monitor ||= RailsTransactionalOutbox::Monitor.new
end

.outbox_worker_health_checkObject



39
40
41
# File 'lib/rails_transactional_outbox.rb', line 39

def self.outbox_worker_health_check
  @outbox_worker_health_check ||= RailsTransactionalOutbox::HealthCheck.new
end

.resetObject



35
36
37
# File 'lib/rails_transactional_outbox.rb', line 35

def self.reset
  @configuration = nil
end

.start_outbox_worker(threads_number: 1) ⇒ Object



49
50
51
52
53
54
# File 'lib/rails_transactional_outbox.rb', line 49

def self.start_outbox_worker(threads_number: 1)
  runners = (1..threads_number).map { RailsTransactionalOutbox::Runner.new(config: configuration) }
  executor = Sigurd::Executor.new(runners, sleep_seconds: 5, logger: configuration.logger)
  signal_handler = Sigurd::SignalHandler.new(executor)
  signal_handler.run!
end