bin/worker
#!/usr/bin/env ruby require_relative '../config/bootstrap.rb'require 'routemaster/models/counters'require 'routemaster/services/thread_group'require 'routemaster/services/worker'require 'routemaster/services/ticker'require 'routemaster/services/scheduler'require 'routemaster/mixins/log' include Routemaster::Mixins::Log Routemaster.configure( redis_pool_size: Integer(ENV.fetch('ROUTEMASTER_WORKER_THREADS')) + 2, process_type: 'worker',) _log.info { 'creating thread group' }Routemaster::Services::ThreadGroup.new.tap do |group| # job promoter group.add Routemaster::Services::Scheduler.new, name: 'scheduler' # ticker threads group.add Routemaster::Services::Ticker.new( queue: Routemaster.aux_queue, name: 'autodrop', every: 10_000 ), name: 'ticker.autodrop' group.add Routemaster::Services::Ticker.new( queue: Routemaster.aux_queue, name: 'monitor', every: ENV.fetch('ROUTEMASTER_MONITOR_INTERVAL').to_i * 1_000 ), name: 'ticker.monitor' group.add Routemaster::Services::Ticker.new( queue: Routemaster.aux_queue, name: 'scrub_queues', every: 60_000 ), name: 'ticker.scrub_queues' group.add Routemaster::Services::Ticker.new( queue: Routemaster.aux_queue, name: 'scrub_workers', every: 120_000 ), name: 'ticker.scrub_workers' # aux worker thread group.add Routemaster::Services::Worker.new( queue: Routemaster.aux_queue ), name: "worker.aux" # main worker threads Integer(ENV.fetch('ROUTEMASTER_WORKER_THREADS')).times do |idx| group.add Routemaster::Services::Worker.new( queue: Routemaster.batch_queue ), name: "worker.main.#{idx + 1}" end _log.info { 'trapping signals for clean exit' } %w(INT TERM QUIT).each do |signal| Kernel.trap(signal) { Thread.new { group.stop } } end _log.info { 'job worker: started' } group.waitend Routemaster.teardown_log.info { 'job worker: completed' }Kernel.exit(0)