Class: Juggler::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/juggler/runner.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(method, concurrency, strategy) ⇒ Runner

Returns a new instance of Runner.



13
14
15
16
17
18
# File 'lib/juggler/runner.rb', line 13

def initialize(method, concurrency, strategy)
  @strategy = strategy
  @concurrency = concurrency
  @queue = method.to_s
  @running = []
end

Class Method Details

.startObject



4
5
6
7
8
9
10
# File 'lib/juggler/runner.rb', line 4

def start
  @started ||= begin
    Signal.trap('INT') { EM.stop }
    Signal.trap('TERM') { EM.stop }
    true
  end
end

Instance Method Details

#reserveObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/juggler/runner.rb', line 20

def reserve
  beanstalk_job = connection.reserve(0)
  params = Marshal.load(beanstalk_job.body)
  job = @strategy.call(params)
  @running << job
  job.callback do
    @running.delete(job)
    beanstalk_job.delete
  end
  job.errback do
    @running.delete(job)
    # Built in exponential backoff
    beanstalk_job.decay
  end
rescue Beanstalk::TimedOut
end

#runObject



37
38
39
40
41
42
# File 'lib/juggler/runner.rb', line 37

def run
  EM.add_periodic_timer do
    reserve if spare_slot?
  end
  Runner.start
end