rabbit_jobs 0.1.15 → 0.2.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,8 +6,6 @@ require 'json'
6
6
  RabbitJobs.configure do |c|
7
7
  c.url "amqp://localhost/"
8
8
 
9
- c.exchange 'test_exchange', durable: true, auto_delete: false
10
-
11
9
  c.queue 'rabbit_jobs_test1', durable: true, auto_delete: false, ack: true, arguments: {'x-ha-policy' => 'all'}
12
10
  c.queue 'rabbit_jobs_test2', durable: true, auto_delete: false, ack: true, arguments: {'x-ha-policy' => 'all'}
13
11
  c.queue 'rabbit_jobs_test3', durable: true, auto_delete: false, ack: true, arguments: {'x-ha-policy' => 'all'}
@@ -0,0 +1,57 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'amqp'
3
+ require 'uri'
4
+
5
+ module RabbitJobs
6
+ class AmqpHelper
7
+
8
+ class << self
9
+ # Calls given block with initialized amqp connection.
10
+ def with_amqp
11
+ raise ArgumentError unless block_given?
12
+
13
+ if EM.reactor_running?
14
+ yield false
15
+ else
16
+ AMQP.start(RJ.config.url) {
17
+ yield true
18
+ }
19
+ end
20
+ end
21
+
22
+ def prepare_channel
23
+ unless AMQP.channel
24
+ create_channel
25
+ else
26
+ create_channel unless AMQP.channel.open?
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def url_from_opts(opts = {})
33
+ s = ""
34
+ s << opts[:scheme]
35
+ s << "://"
36
+ s << "#{opts[:user]}@" if opts[:user] && opts[:user] != 'guest'
37
+ s << opts[:host]
38
+ s << ":#{opts[:port]}" unless (opts[:scheme] == 'amqp' && opts[:port] == 5672) || (opts[:scheme] == 'amqps' && opts[:port] == 5673)
39
+ s << opts[:vhost]
40
+ end
41
+
42
+ def create_channel
43
+ AMQP.channel = AMQP::Channel.new(AMQP.connection, auto_recovery: true)
44
+
45
+ AMQP.connection.on_recovery do |conn, opts|
46
+ url = url_from_opts opts
47
+ RJ.logger.warn "[network failure] Connection to #{url} established."
48
+ end
49
+ AMQP.connection.on_tcp_connection_loss do |conn, opts|
50
+ url = url_from_opts opts
51
+ RJ.logger.warn "[network failure] Trying to reconnect to #{url}..."
52
+ conn.reconnect(false, 2)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,13 +1,14 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require 'yaml'
3
+ require 'uri'
3
4
 
4
5
  module RabbitJobs
5
6
 
6
7
  extend self
7
8
 
8
- def configure(&block)
9
+ def configure
9
10
  @@configuration ||= Configuration.new
10
- block.call(@@configuration)
11
+ yield @@configuration if block_given?
11
12
  end
12
13
 
13
14
  def config
@@ -27,8 +28,8 @@ module RabbitJobs
27
28
 
28
29
  unless @@configuration
29
30
  self.configure do |c|
30
- c.url 'amqp://localhost/'
31
- c.exchange 'rabbit_jobs', auto_delete: false, durable: true
31
+ c.url 'amqp://localhost'
32
+ c.prefix 'rabbit_jobs'
32
33
  end
33
34
  end
34
35
 
@@ -44,14 +45,9 @@ module RabbitJobs
44
45
  ack: true
45
46
  }
46
47
 
47
- DEFAULT_EXCHANGE_PARAMS = {
48
- auto_delete: false,
49
- durable: true
50
- }
51
-
52
48
  DEFAULT_MESSAGE_PARAMS = {
53
49
  persistent: true,
54
- nowait: false,
50
+ mandatory: true,
55
51
  immediate: false
56
52
  }
57
53
 
@@ -62,9 +58,8 @@ module RabbitJobs
62
58
  def initialize
63
59
  @data = {
64
60
  error_log: true,
65
- url: 'amqp://localhost/',
66
- exchange: 'rabbit_jobs',
67
- exchange_params: DEFAULT_EXCHANGE_PARAMS,
61
+ url: 'amqp://localhost',
62
+ prefix: 'rabbit_jobs',
68
63
  queues: {}
69
64
  }
70
65
  end
@@ -76,18 +71,10 @@ module RabbitJobs
76
71
  def connection_options
77
72
  return @data[:connection_options] if @data[:connection_options]
78
73
 
79
- ports = {'amqp' => 5672, 'amqps' => 5671}
80
- uri = URI.parse(self.url)
81
-
82
- raise "Unknown scheme" unless ports.keys.include?(uri.scheme.downcase)
83
-
84
- @data[:connection_options] = {
85
- host: uri.host || 'localhost',
86
- port: uri.port || ports[uri.scheme.downcase],
87
- vhost: uri.path || '/',
88
- user: uri.user || 'guest',
89
- password: uri.password || 'guest'
90
- }
74
+ @data[:connection_options] = AMQP::Client.parse_connection_uri(url)
75
+ @data[:vhost] ||= "/"
76
+ @data[:vhost] = "/" if @data[:vhost].empty?
77
+ @data[:connection_options]
91
78
  end
92
79
 
93
80
  def mail_errors_to(email = nil)
@@ -118,19 +105,18 @@ module RabbitJobs
118
105
  if value
119
106
  raise ArgumentError unless value.is_a?(String) && value != ""
120
107
  @data[:url] = value.to_s
121
- @data[:connection_options] = nil
108
+ @data.delete :connection_options
122
109
  else
123
- @data[:url] || 'amqp://localhost/'
110
+ @data[:url] || 'amqp://localhost'
124
111
  end
125
112
  end
126
113
 
127
- def exchange(value = nil, params = {})
114
+ def prefix(value = nil)
128
115
  if value
129
116
  raise ArgumentError unless value.is_a?(String) && value != ""
130
- @data[:exchange] = value.downcase
131
- @data[:exchange_params] = DEFAULT_EXCHANGE_PARAMS.merge(params)
117
+ @data[:prefix] = value.downcase
132
118
  else
133
- @data[:exchange]
119
+ @data[:prefix]
134
120
  end
135
121
  end
136
122
 
@@ -153,13 +139,15 @@ module RabbitJobs
153
139
 
154
140
  def init_default_queue
155
141
  queue('default', DEFAULT_QUEUE_PARAMS) if @data[:queues].empty?
156
- key = @data[:queues].keys.first
157
142
  end
158
143
 
159
- alias_method :default_queue, :init_default_queue
144
+ def default_queue
145
+ queue('default', DEFAULT_QUEUE_PARAMS) if @data[:queues].empty?
146
+ key = @data[:queues].keys.first
147
+ end
160
148
 
161
149
  def queue_name(routing_key)
162
- [@data[:exchange], routing_key].join('#')
150
+ [@data[:prefix], routing_key].join('#')
163
151
  end
164
152
 
165
153
  def load_file(filename)
@@ -176,11 +164,10 @@ module RabbitJobs
176
164
  elsif defined?(Rails) && yaml[Rails.env.to_s]
177
165
  convert_yaml_config(yaml[Rails.env.to_s])
178
166
  else
179
- @data = {url: nil, exchange: nil, queues: {}}
180
- %w(url exchange mail_errors_to mail_errors_from).each do |m|
167
+ @data = {url: nil, prefix: nil, queues: {}}
168
+ %w(url prefix mail_errors_to mail_errors_from).each do |m|
181
169
  self.send(m, yaml[m])
182
170
  end
183
- exchange yaml['exchange'], symbolize_keys!(yaml['exchange_params'])
184
171
  yaml['queues'].each do |name, params|
185
172
  queue name, symbolize_keys!(params) || {}
186
173
  end
@@ -2,7 +2,11 @@
2
2
  module RabbitJobs
3
3
  class ErrorMailer
4
4
  def self.enabled?
5
- defined?(ActionMailer) && !!RabbitJobs.config.mail_errors_from && !RabbitJobs.config.mail_errors_from.empty?
5
+ !!(
6
+ defined?(ActionMailer) && \
7
+ RabbitJobs.config.mail_errors_from && !RabbitJobs.config.mail_errors_from.empty? && \
8
+ RabbitJobs.config.mail_errors_to && !RabbitJobs.config.mail_errors_to.empty?
9
+ )
6
10
  end
7
11
 
8
12
  def self.report_error(job, error = $!)
@@ -14,29 +14,16 @@ module RabbitJobs::Job
14
14
  self.opts = {}
15
15
  end
16
16
 
17
- attr_accessor :params, :opts, :child_pid
17
+ attr_accessor :params, :opts
18
18
 
19
19
  def run_perform
20
- if @child_pid = fork
21
- srand # Reseeding
22
- RJ.logger.info "Forked #{@child_pid} at #{Time.now} to process #{self.class}.perform(#{ params.map(&:inspect).join(', ') })"
23
- Process.wait(@child_pid)
24
- yield if block_given?
25
- else
26
- $0 = "##{@child_pid} #{self.class}.perform(#{ params.map(&:inspect).join(', ') }) #{$0}"
27
- begin
28
- RJ.__after_fork_callbacks.each do |callback|
29
- callback.call()
30
- end
31
-
32
- self.class.perform(*params)
33
- rescue
34
- RJ.logger.warn(self.inspect)
35
- RJ.logger.warn([$!.inspect, $!.backtrace.to_a].join("\n"))
36
- run_on_error_hooks($!)
37
- RabbitJobs::ErrorMailer.report_error(self, $!)
38
- end
39
- exit!
20
+ begin
21
+ self.class.perform(*params)
22
+ rescue
23
+ RJ.logger.warn(self.inspect)
24
+ RJ.logger.warn([$!.inspect, $!.backtrace.to_a].join("\n"))
25
+ run_on_error_hooks($!)
26
+ RabbitJobs::ErrorMailer.report_error(self, $!)
40
27
  end
41
28
  end
42
29
 
@@ -104,14 +91,18 @@ module RabbitJobs::Job
104
91
  begin
105
92
  encoded = JSON.parse(payload)
106
93
  job_klass = constantize(encoded['class'])
107
- job = encoded['params'].count > 0 ? job_klass.new(*encoded['params']) : job_klass.new
94
+ job = job_klass.new(*encoded['params'])
108
95
  job.opts = encoded['opts']
109
96
  job
97
+ rescue NameError
98
+ RJ.logger.error "Cannot find job class '#{encoded['class']}'"
99
+ :not_found
110
100
  rescue
111
101
  RJ.logger.error "JOB INIT ERROR at #{Time.now.to_s}:"
112
102
  RJ.logger.error $!.inspect
113
103
  RJ.logger.error $!.backtrace
114
104
  RJ.logger.error "message: #{payload.inspect}"
105
+ nil
115
106
  end
116
107
  end
117
108
  end
@@ -3,27 +3,23 @@
3
3
  require 'json'
4
4
  require 'amqp'
5
5
  require 'eventmachine'
6
- require 'bunny'
7
6
  require 'uri'
8
7
 
9
8
  module RabbitJobs
10
9
  module Publisher
11
10
  extend self
12
- extend AmqpHelpers
13
11
 
14
12
  def publish(klass, *params)
15
13
  publish_to(RJ.config.default_queue, klass, *params)
16
14
  end
17
15
 
18
16
  def publish_to(routing_key, klass, *params)
19
- raise ArgumentError unless klass && (klass.is_a?(Class) || klass.is_a?(String))
20
- raise ArgumentError unless routing_key && (routing_key.is_a?(Symbol) || routing_key.is_a?(String))
17
+ raise ArgumentError.new("klass=#{klass.inspect}") unless klass && (klass.is_a?(Class) || klass.is_a?(String))
18
+ raise ArgumentError.new("routing_key=#{routing_key}") unless routing_key && (routing_key.is_a?(Symbol) || routing_key.is_a?(String)) && !!RJ.config[:queues][routing_key.to_s]
21
19
 
22
20
  begin
23
- with_bunny do |bunny|
24
- exchange = bunny.exchange(RJ.config[:exchange], RJ.config[:exchange_params])
25
- queue = bunny.queue(RJ.config.queue_name(routing_key), RJ.config[:queues][routing_key.to_s])
26
- queue.bind(exchange, :routing_key => routing_key.to_s)
21
+ AmqpHelper.with_amqp do |stop_em|
22
+ AmqpHelper.prepare_channel
27
23
 
28
24
  payload = {
29
25
  'class' => klass.to_s,
@@ -31,9 +27,14 @@ module RabbitJobs
31
27
  'params' => params
32
28
  }.to_json
33
29
 
34
- exchange.publish(payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({key: routing_key.to_s}))
30
+ AMQP::Exchange.default.publish(payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({key: RJ.config.queue_name(routing_key.to_s)})) do
31
+ if stop_em
32
+ AMQP.connection.disconnect { EM.stop }
33
+ end
34
+ end
35
35
  end
36
36
  rescue
37
+ raise $!
37
38
  RJ.logger.warn $!.inspect
38
39
  RJ.logger.warn $!.backtrace.join("\n")
39
40
  end
@@ -45,24 +46,27 @@ module RabbitJobs
45
46
  raise ArgumentError unless routing_keys && routing_keys.count > 0
46
47
 
47
48
  messages_count = 0
48
- with_bunny do |bunny|
49
+
50
+ count = routing_keys.count
51
+
52
+ AmqpHelper.with_amqp do |stop_em|
49
53
  routing_keys.each do |routing_key|
50
- queue = bunny.queue(RJ.config.queue_name(routing_key), RJ.config[:queues][routing_key.to_s])
51
- messages_count += queue.status[:message_count]
52
- queue.purge
54
+ queue = AMQP.channel.queue(RJ.config.queue_name(routing_key), RJ.config[:queues][routing_key.to_s])
55
+ queue.status do |messages, consumers|
56
+ # messages_count += messages
57
+ queue.purge do |ret|
58
+ raise "Cannot purge queue #{routing_key.to_s}." unless ret.is_a?(AMQ::Protocol::Queue::PurgeOk)
59
+ messages_count += ret.message_count
60
+ count -= 1
61
+ if count == 0 && stop_em
62
+ AMQP.connection.disconnect { EM.stop }
63
+ end
64
+ end
65
+ end
53
66
  end
54
67
  end
55
- return messages_count
56
- end
57
68
 
58
- private
59
- def self.with_bunny(&block)
60
- raise ArgumentError unless block
61
-
62
- # raise RJ.config.connection_options.inspect
63
- Bunny.run(RJ.config.connection_options.merge({logging: false})) do |bunny|
64
- block.call(bunny)
65
- end
69
+ return messages_count
66
70
  end
67
71
  end
68
72
  end
@@ -6,7 +6,6 @@ require 'yaml'
6
6
 
7
7
  module RabbitJobs
8
8
  class Scheduler
9
- include AmqpHelpers
10
9
 
11
10
  attr_accessor :pidfile, :background, :schedule, :process_name
12
11
 
@@ -88,7 +87,14 @@ module RabbitJobs
88
87
  $0 = self.process_name || "rj_scheduler"
89
88
 
90
89
  processed_count = 0
91
- amqp_with_exchange do |connection, exchange|
90
+ AmqpHelper.with_amqp do |connection, stop_em|
91
+ channel = AMQP::Channel.new(connection)
92
+
93
+ channel.on_error do |ch, channel_close|
94
+ puts "Channel-level error: #{channel_close.reply_text}, shutting down..."
95
+ connection.disconnect { EM.stop }
96
+ end
97
+
92
98
  load_schedule!
93
99
 
94
100
  check_shutdown = Proc.new {
@@ -154,19 +160,6 @@ module RabbitJobs
154
160
 
155
161
  def shutdown!
156
162
  shutdown
157
- kill_child
158
- end
159
-
160
- def kill_child
161
- if @job && @job.child_pid
162
- # RJ.logger.warn "Killing child at #{@child}"
163
- if Kernel.system("ps -o pid,state -p #{@job.child_pid}")
164
- Process.kill("KILL", @job.child_pid) rescue nil
165
- else
166
- # RJ.logger.warn "Child #{@child} not found, restarting."
167
- # shutdown
168
- end
169
- end
170
163
  end
171
164
  end
172
165
  end
@@ -1,3 +1,3 @@
1
1
  module RabbitJobs
2
- VERSION = "0.1.15"
2
+ VERSION = "0.2.0.pre1"
3
3
  end
@@ -2,8 +2,6 @@
2
2
 
3
3
  module RabbitJobs
4
4
  class Worker
5
- include AmqpHelpers
6
-
7
5
  attr_accessor :pidfile, :background, :process_name, :worker_pid
8
6
 
9
7
  # Workers should be initialized with an array of string queue
@@ -39,15 +37,16 @@ module RabbitJobs
39
37
  RJ.logger.info("Connecting to amqp...")
40
38
 
41
39
  begin
42
- amqp_with_exchange do |connection, exchange|
43
- exchange.channel.prefetch(1)
40
+ AmqpHelper.with_amqp do |stop_em|
41
+ AmqpHelper.prepare_channel
42
+ AMQP.channel.prefetch(1)
44
43
 
45
44
  check_shutdown = Proc.new {
46
45
  if @shutdown
47
46
  RJ.logger.info "Processed jobs: #{processed_count}"
48
47
  RJ.logger.info "Stopping worker ##{Process.pid}..."
49
48
 
50
- connection.close {
49
+ AMQP.connection.disconnect {
51
50
  File.delete(self.pidfile) if self.pidfile && File.exists?(self.pidfile)
52
51
  RJ.logger.info "##{Process.pid} stopped."
53
52
  RJ.logger.close
@@ -60,24 +59,28 @@ module RabbitJobs
60
59
  }
61
60
 
62
61
  queues.each do |routing_key|
63
- queue = make_queue(exchange, routing_key)
62
+ queue = AMQP.channel.queue(RJ.config.queue_name(routing_key), RJ.config[:queues][routing_key])
64
63
 
65
- RJ.logger.info "Worker ##{Process.pid} <= #{exchange.name}##{routing_key}"
64
+ RJ.logger.info "Worker ##{Process.pid} <= #{RJ.config.queue_name(routing_key)}"
66
65
 
67
66
  explicit_ack = !!RJ.config[:queues][routing_key][:ack]
68
67
 
69
68
  queue.subscribe(ack: explicit_ack) do |metadata, payload|
70
69
  @job = RJ::Job.parse(payload)
71
70
 
72
- unless @job.expired?
73
- @job.run_perform
74
- processed_count += 1
71
+ if @job == :not_found
72
+ metadata.ack if explicit_ack
75
73
  else
76
- RJ.logger.info "Job expired: #{@job.inspect}"
74
+ if @job.expired?
75
+ RJ.logger.info "Job expired: #{@job.inspect}"
76
+ else
77
+ @job.run_perform
78
+ processed_count += 1
79
+ end
80
+
81
+ metadata.ack if explicit_ack
77
82
  end
78
83
 
79
- metadata.ack if explicit_ack
80
-
81
84
  check_shutdown.call
82
85
  end
83
86
  end
@@ -140,14 +143,6 @@ module RabbitJobs
140
143
 
141
144
  def shutdown!
142
145
  shutdown
143
- kill_child
144
- end
145
-
146
- def kill_child
147
- if @job && @job.child_pid
148
- RJ.logger.info "Killing child #{@job.child_pid} at #{Time.now}"
149
- Process.kill("KILL", @job.child_pid) rescue nil
150
- end
151
146
  end
152
147
  end
153
148
  end
data/lib/rabbit_jobs.rb CHANGED
@@ -4,7 +4,7 @@ require 'rabbit_jobs/version'
4
4
 
5
5
  require 'rabbit_jobs/util'
6
6
  require 'rabbit_jobs/helpers'
7
- require 'rabbit_jobs/amqp_helpers'
7
+ require 'rabbit_jobs/amqp_helper'
8
8
  require 'rabbit_jobs/configuration'
9
9
  require 'rabbit_jobs/error_mailer'
10
10
 
@@ -30,17 +30,6 @@ module RabbitJobs
30
30
  def logger
31
31
  @logger ||= Logger.new $stdout
32
32
  end
33
-
34
- def after_fork(&block)
35
- raise ArgumentError.new("No block passed to after_fork") unless block_given?
36
- @@after_fork_callbacks ||= []
37
-
38
- @@after_fork_callbacks << block
39
- end
40
-
41
- def __after_fork_callbacks
42
- @@after_fork_callbacks ||= []
43
- end
44
33
  end
45
34
 
46
35
  RJ = RabbitJobs
data/rabbit_jobs.gemspec CHANGED
@@ -18,7 +18,6 @@ Gem::Specification.new do |gem|
18
18
  gem.version = RabbitJobs::VERSION
19
19
 
20
20
  gem.add_dependency "amqp", "~> 0.9"
21
- gem.add_dependency "bunny", "~> 0.7"
22
21
  gem.add_dependency "rake"
23
22
  gem.add_dependency "rufus-scheduler", "~> 2.0"
24
23
  end
@@ -1,9 +1,6 @@
1
1
  rabbit_jobs:
2
2
  url: amqp://example.com/vhost
3
- exchange: 'my_exchange'
4
- exchange_params:
5
- durable: true
6
- auto_delete: false
3
+ prefix: 'rabbit_jobs'
7
4
  queues:
8
5
  durable_queue:
9
6
  durable: true
@@ -7,8 +7,7 @@ describe RabbitJobs::Publisher do
7
7
 
8
8
  before(:each) do
9
9
  RabbitJobs.configure do |c|
10
- c.url 'amqp://localhost/'
11
- c.exchange 'test'
10
+ c.url 'amqp://localhost'
12
11
  c.queue 'rspec_queue'
13
12
  c.queue 'rspec_queue2'
14
13
  c.queue 'rspec_queue3'
@@ -6,7 +6,7 @@ require 'eventmachine'
6
6
  describe RabbitJobs::Worker do
7
7
  it 'should listen for messages' do
8
8
  RabbitJobs.configure do |c|
9
- c.exchange 'test_durable', auto_delete: false, durable: true
9
+ c.prefix 'test_durable'
10
10
  c.queue 'rspec_durable_queue', auto_delete: false, durable: true, ack: true
11
11
  end
12
12
 
@@ -23,7 +23,7 @@ describe RabbitJobs::Worker do
23
23
 
24
24
  it 'should allow to publish jobs from worker' do
25
25
  RabbitJobs.configure do |c|
26
- c.exchange 'test_durable', auto_delete: false, durable: true
26
+ c.prefix 'test_durable'
27
27
  c.queue 'rspec_durable_queue', auto_delete: false, durable: true, ack: true
28
28
  end
29
29
 
@@ -8,7 +8,7 @@ describe RabbitJobs::Configuration do
8
8
 
9
9
  c.url "amqp://somehost.lan"
10
10
 
11
- c.exchange 'my_exchange', durable: true, auto_delete: false
11
+ c.prefix 'my_prefix'
12
12
 
13
13
  c.queue 'durable_queue', durable: true, auto_delete: false, ack: true, arguments: {'x-ha-policy' => 'all'}
14
14
  c.queue 'fast_queue', durable: false, auto_delete: true, ack: false
@@ -17,11 +17,7 @@ describe RabbitJobs::Configuration do
17
17
  RabbitJobs.config.to_hash.should == {
18
18
  error_log: false,
19
19
  url: "amqp://somehost.lan",
20
- exchange: "my_exchange",
21
- exchange_params: {
22
- durable: true,
23
- auto_delete: false
24
- },
20
+ prefix: "my_prefix",
25
21
  queues: {
26
22
  "durable_queue" => {
27
23
  durable: true,
@@ -43,11 +39,7 @@ describe RabbitJobs::Configuration do
43
39
 
44
40
  RabbitJobs.config.to_hash.should == {
45
41
  url: "amqp://example.com/vhost",
46
- exchange: "my_exchange",
47
- exchange_params: {
48
- durable: true,
49
- auto_delete: false
50
- },
42
+ prefix: "my_prefix",
51
43
  queues: {
52
44
  "durable_queue" => {
53
45
  durable: true,
@@ -68,11 +60,7 @@ describe RabbitJobs::Configuration do
68
60
  RabbitJobs.config.to_hash.should == {
69
61
  error_log: true,
70
62
  url: "amqp://localhost",
71
- exchange: "rabbit_jobs",
72
- exchange_params: {
73
- auto_delete: false,
74
- durable: true
75
- },
63
+ prefix: "rabbit_jobs",
76
64
  queues: {
77
65
  "default" => {
78
66
  auto_delete: false,
@@ -86,8 +74,8 @@ describe RabbitJobs::Configuration do
86
74
  it 'returns settings on some methods' do
87
75
  RabbitJobs.config.error_log == true
88
76
  RabbitJobs.config.url.should == 'amqp://localhost'
89
- RabbitJobs.config.routing_keys.should == ['default']
90
- RabbitJobs.config.exchange.should == 'rabbit_jobs'
77
+ RabbitJobs.config.routing_keys.should == []
78
+ RabbitJobs.config.prefix.should == 'rabbit_jobs'
91
79
  RabbitJobs.config.queue_name('default').should == 'rabbit_jobs#default'
92
80
  end
93
81
  end
@@ -7,9 +7,10 @@ describe RabbitJobs::ErrorMailer do
7
7
  it 'should be enabled when use setup email' do
8
8
  RabbitJobs::ErrorMailer.enabled?.should == false
9
9
  RabbitJobs.configure do |c|
10
- c.mail_errors_to 'dev@example.com', 'app@example.com'
10
+ c.mail_errors_to 'dev@example.com'
11
+ c.mail_errors_from 'app@example.com'
11
12
  end
12
- puts RJ.config.inspect
13
+
13
14
  RabbitJobs::ErrorMailer.enabled?.should == true
14
15
  end
15
16
  end
@@ -38,23 +38,5 @@ describe RabbitJobs::Worker do
38
38
  @worker.shutdown
39
39
  @worker.instance_variable_get('@shutdown').should == true
40
40
  end
41
-
42
- it '#shutdown! should kill child process' do
43
- mock(@worker.kill_child)
44
- mock(@worker.shutdown)
45
-
46
- @worker.shutdown!
47
- end
48
-
49
- it '#kill_child' do
50
- job = TestJob.new()
51
- job.instance_variable_set '@child_pid', 123123
52
- @worker.instance_variable_set('@job', job)
53
-
54
- mock(Kernel).system("ps -o pid,state -p #{123123}") { true }
55
- mock(Process).kill("KILL", 123123)
56
-
57
- @worker.kill_child
58
- end
59
41
  end
60
42
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbit_jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
5
- prerelease:
4
+ version: 0.2.0.pre1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Pavel Lazureykis
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-27 00:00:00.000000000 Z
12
+ date: 2012-11-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: amqp
@@ -27,22 +27,6 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0.9'
30
- - !ruby/object:Gem::Dependency
31
- name: bunny
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: '0.7'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '0.7'
46
30
  - !ruby/object:Gem::Dependency
47
31
  name: rake
48
32
  requirement: !ruby/object:Gem::Requirement
@@ -90,7 +74,7 @@ files:
90
74
  - Rakefile
91
75
  - examples/configuration.rb
92
76
  - lib/rabbit_jobs.rb
93
- - lib/rabbit_jobs/amqp_helpers.rb
77
+ - lib/rabbit_jobs/amqp_helper.rb
94
78
  - lib/rabbit_jobs/configuration.rb
95
79
  - lib/rabbit_jobs/error_mailer.rb
96
80
  - lib/rabbit_jobs/helpers.rb
@@ -129,16 +113,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
113
  version: '0'
130
114
  segments:
131
115
  - 0
132
- hash: 4442654216517974901
116
+ hash: -1227131973983864781
133
117
  required_rubygems_version: !ruby/object:Gem::Requirement
134
118
  none: false
135
119
  requirements:
136
- - - ! '>='
120
+ - - ! '>'
137
121
  - !ruby/object:Gem::Version
138
- version: '0'
139
- segments:
140
- - 0
141
- hash: 4442654216517974901
122
+ version: 1.3.1
142
123
  requirements: []
143
124
  rubyforge_project:
144
125
  rubygems_version: 1.8.24
@@ -1,52 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'uri'
3
-
4
- module RabbitJobs
5
- module AmqpHelpers
6
-
7
- # Calls given block with initialized amqp
8
- def amqp_with_exchange(&block)
9
- raise ArgumentError unless block
10
-
11
- connection = AMQP.connection
12
- if connection && connection.open?
13
- channel = AMQP::Channel.new(connection)
14
- exchange = channel.direct(RJ.config[:exchange], RJ.config[:exchange_params])
15
- # go work
16
- block.call(connection, exchange)
17
-
18
- else
19
- AMQP.start(RJ.config.connection_options) do |connection|
20
-
21
- channel = AMQP::Channel.new(connection)
22
-
23
- channel.on_error do |ch, channel_close|
24
- puts "Channel-level error: #{channel_close.reply_text}, shutting down..."
25
- connection.close { EM.stop }
26
- end
27
-
28
- exchange = channel.direct(RJ.config[:exchange], RJ.config[:exchange_params])
29
- # go work
30
- block.call(connection, exchange)
31
- end
32
- end
33
- end
34
-
35
- def amqp_with_queue(routing_key, &block)
36
- raise ArgumentError unless routing_key && block
37
-
38
- amqp_with_exchange do |connection, exchange|
39
- queue = make_queue(exchange, routing_key.to_s)
40
-
41
- # go work
42
- block.call(connection, queue)
43
- end
44
- end
45
-
46
- def make_queue(exchange, routing_key)
47
- queue = exchange.channel.queue(RJ.config.queue_name(routing_key), RJ.config[:queues][routing_key])
48
- queue.bind(exchange, :routing_key => routing_key)
49
- queue
50
- end
51
- end
52
- end