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/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/outbox_entries_processor.rb,
lib/rails_transactional_outbox/outbox_entries_processors.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/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, ErrorHandlers, EventType, ExponentialBackoff, HealthCheck, Monitor, NullLockClient, OutboxEntriesProcessor, OutboxEntriesProcessors, OutboxEntryFactory, Railtie, RecordProcessor, RecordProcessors, Runner, RunnerSleepInterval

Constant Summary collapse

VERSION =
"0.4.0"

Class Method Summary collapse

Class Method Details

.configurationObject



20
21
22
# File 'lib/rails_transactional_outbox.rb', line 20

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

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

Yields:



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

def self.configure
  yield configuration
end

.enable_outbox_worker_healthcheckObject



40
41
42
43
44
# File 'lib/rails_transactional_outbox.rb', line 40

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



11
12
13
14
15
16
17
18
# File 'lib/rails_transactional_outbox.rb', line 11

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



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

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

.outbox_worker_health_checkObject



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

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

.resetObject



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

def self.reset
  @configuration = nil
end

.start_outbox_worker(threads_number: 1) ⇒ Object



46
47
48
49
50
51
# File 'lib/rails_transactional_outbox.rb', line 46

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