rabbit_jobs 0.6.2 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
data/examples/client CHANGED
@@ -13,36 +13,13 @@ end
13
13
 
14
14
  RJ.configure { |c|
15
15
  c.queue "failover_test"
16
- c.server "amqp://localhost/"
16
+ c.server "amqp://localhost/bunny"
17
17
  }
18
18
 
19
- RJ.logger = Logger.new($stdout)
20
-
21
- RJ.run {
22
- RJ.publish(MyCurrentJob) {
23
- puts 'published first message'
24
- RJ.stop
25
- }
26
-
27
- # EM.add_timer(5) {
28
- # RJ.publish(MyCurrentJob) {
29
- # puts 'published second message'
30
- # RJ.stop
31
- # }
32
- # }
33
- }
34
-
35
-
36
- 1000.times {
37
- RJ.run do
38
- count = 10000
39
- published = 0
40
- count.times {
41
- RJ.publish_to(:default, MyCurrentJob) {
42
- published += 1
43
- RJ.stop if published >= count
44
- }
45
- }
46
- end
47
- puts 'returned from em'
48
- }
19
+ i = 0
20
+ loop do
21
+ puts "publishing job #{i}"
22
+ RJ.publish_to(:failover_test, MyCurrentJob, i)
23
+ i += 1
24
+ sleep 1
25
+ end
data/examples/worker CHANGED
@@ -8,21 +8,15 @@ require File.expand_path('../../lib/rabbit_jobs', __FILE__)
8
8
  class MyCurrentJob
9
9
  include RJ::Job
10
10
  def self.perform(count = 0)
11
- # puts count
11
+ puts count
12
12
  # RJ.publish_to(:default, MyCurrentJob, count - 1) if count > 0
13
13
  end
14
14
  end
15
15
 
16
16
  RJ.configure { |c|
17
17
  c.queue "failover_test"
18
- c.server "amqp://localhost/"
19
- c.server "amqp://dev.lan/"
18
+ c.server "amqp://localhost/bunny"
20
19
  }
21
20
 
22
- # AMQ::Client.logging = false
23
- AMQP.logging = false
24
-
25
- RJ.logger = Logger.new($stdout)
26
-
27
21
  worker = RJ::Worker.new
28
22
  worker.work
@@ -1,119 +1,18 @@
1
1
  # -*- encoding : utf-8 -*-
2
- require 'amqp'
2
+ require 'bunny'
3
3
  require 'uri'
4
4
 
5
5
  module RabbitJobs
6
6
  class AmqpHelper
7
7
 
8
- # Timeout to recover connection.
9
- RECOVERY_TIMEOUT = 3
10
- HOSTS_DEAD = []
11
- HOSTS_FAILED = {}
12
- AUTO_RECOVERY_ENABLED = true
13
-
14
8
  class << self
15
9
 
16
- def prepare_connection(conn)
17
- if !conn || conn.closed?
18
- RJ.logger.info("Connecting to #{RJ.config.servers.first.to_s}...")
19
- conn = AMQP.connect(RJ.config.servers.first, auto_recovery: AUTO_RECOVERY_ENABLED)
20
- init_auto_recovery(conn) if AUTO_RECOVERY_ENABLED
21
- end
10
+ def prepare_connection
11
+ conn = Bunny.new(RJ.config.server)
12
+ conn.start unless conn.connected? || conn.connecting?
22
13
  conn
23
14
  end
24
15
 
25
- def create_channel(connection)
26
- AMQP::Channel.new(connection, auto_recovery: AUTO_RECOVERY_ENABLED)
27
- end
28
-
29
- def init_auto_recovery(connection)
30
- connection.on_recovery do |conn, opts|
31
- HOSTS_DEAD.clear
32
- HOSTS_FAILED.clear
33
- url = url_from_opts opts
34
- RJ.logger.warn "Connection to #{url} recovered."
35
- end
36
-
37
- connection.on_open do |conn, opts|
38
- RJ.logger.info "Connected."
39
- end
40
-
41
- # connection.on_tcp_connection_loss do |conn, opts|
42
- # sleep 1
43
- # restore_from_connection_failure(conn, opts) unless conn.closed?
44
- # end
45
-
46
- connection.on_tcp_connection_failure do |opts|
47
- sleep 1
48
- restore_from_connection_failure(connection, opts)
49
- end
50
-
51
-
52
- # connection.before_recovery do |conn, opts|
53
- # RJ.logger.info "before_recovery"
54
- # end
55
-
56
- # connection.on_possible_authentication_failure do |conn, opts|
57
- # puts opts.inspect
58
- # # restore_from_connection_failure(conn, opts)
59
- # end
60
-
61
- # connection.on_connection_interruption do |conn|
62
- # # restore_from_connection_failure(conn, opts)
63
- # end
64
- end
65
-
66
- private
67
-
68
- def restore_from_connection_failure(connection, opts)
69
- url = opts.empty? ? RJ.config.servers.first : url_from_opts(opts)
70
- HOSTS_FAILED[url] ||= Time.now
71
-
72
- if HOSTS_FAILED[url] + RECOVERY_TIMEOUT < Time.now
73
- # reconnect to another host
74
- HOSTS_DEAD.push(url) unless HOSTS_DEAD.include?(url)
75
- new_url = (RJ.config.servers.dup - HOSTS_DEAD.dup).first
76
- if new_url
77
- reconnect_to(connection, new_url)
78
- else
79
- # all hosts is dead
80
- end
81
- else
82
- # reconnect to the same host
83
- reconnect_to(connection, url)
84
- end
85
- end
86
-
87
- def reconnect_to(connection, url)
88
- if connection
89
- RJ.logger.warn "Trying to reconnect to #{url}..."
90
- connection.reconnect_to(url, 2)
91
- else
92
- RJ.logger.warn "Trying to connect to #{url}..."
93
- connection = AMQP.connect(url, auto_recovery: true)
94
- init_auto_recovery(connection)
95
- end
96
- end
97
-
98
- def url_from_opts(opts = {})
99
- return "" unless opts
100
- return "" if opts.empty?
101
-
102
- scheme = opts[:scheme] || "amqp"
103
- vhost = opts[:vhost] || "/"
104
- vhost = "/#{vhost}" unless vhost[0] == '/'
105
- use_default_port = (scheme == 'amqp' && opts[:port] == 5672) || (scheme == 'amqps' && opts[:port] == 5673)
106
- use_default_credentials = opts[:user] == 'guest' && opts[:pass] == 'guest'
107
-
108
- s = ""
109
- s << scheme
110
- s << "://"
111
- s << "#{opts[:user]}:#{opts[:pass]}@" unless use_default_credentials
112
- s << opts[:host]
113
- s << ":#{opts[:port]}" unless use_default_port
114
- s << vhost
115
- s
116
- end
117
16
  end
118
17
  end
119
18
  end
@@ -64,7 +64,7 @@ module RabbitJobs
64
64
  @data = {
65
65
  error_log: true,
66
66
  workers: {},
67
- servers: [],
67
+ server: 'amqp://localhost/',
68
68
  prefix: 'rabbit_jobs',
69
69
  queues: {}
70
70
  }
@@ -98,20 +98,9 @@ module RabbitJobs
98
98
  @data[:error_log] = false
99
99
  end
100
100
 
101
- def servers(*value)
102
- unless value.empty?
103
- @data[:servers] = value.map(&:to_s).map(&:strip).keep_if{|url|!url.empty?}.map {|url|
104
- normalize_url(url)
105
- }
106
- end
107
- @data[:servers]
108
- end
109
-
110
101
  def server(value = nil)
111
- raise unless value && !value.to_s.empty?
112
- value = normalize_url(value.to_s.strip)
113
- @data[:servers] ||= []
114
- @data[:servers] << value unless @data[:servers].include?(value)
102
+ @data[:server] = value.to_s.strip if value && value.length > 0
103
+ @data[:server]
115
104
  end
116
105
 
117
106
  def prefix(value = nil)
@@ -179,24 +168,13 @@ module RabbitJobs
179
168
  convert_yaml_config(yaml[Rails.env.to_s])
180
169
  else
181
170
  @data = {prefix: nil, queues: {}}
182
- %w(prefix mail_errors_to mail_errors_from).each do |m|
171
+ %w(server prefix mail_errors_to mail_errors_from).each do |m|
183
172
  self.send(m, yaml[m])
184
173
  end
185
- yaml['servers'].split(",").each do |value|
186
- server normalize_url(value)
187
- end
188
174
  yaml['queues'].each do |name, params|
189
175
  queue name, symbolize_keys!(params) || {}
190
176
  end
191
177
  end
192
178
  end
193
-
194
- private
195
-
196
- def normalize_url(url_string)
197
- uri = URI.parse(url_string)
198
- uri.path = "" if uri.path.to_s == "/"
199
- uri.to_s
200
- end
201
179
  end
202
180
  end
@@ -1,8 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  require 'json'
4
- require 'amqp'
5
- require 'eventmachine'
4
+ require 'bunny'
6
5
  require 'uri'
7
6
  require 'active_support'
8
7
  require 'active_support/core_ext/module'
@@ -11,20 +10,14 @@ module RabbitJobs
11
10
  module Publisher
12
11
  extend self
13
12
 
14
- mattr_accessor :_connection
15
- mattr_accessor :_channel
16
-
17
13
  def amqp_connection
18
- self._connection ||= AmqpHelper.prepare_connection(self._connection)
19
- end
20
-
21
- def amqp_channel
22
- self._connection ||= AmqpHelper.prepare_connection(self._connection)
23
- self._channel ||= AmqpHelper.create_channel(self._connection)
14
+ Thread.current[:rj_publisher_connection] ||= AmqpHelper.prepare_connection
24
15
  end
25
16
 
26
17
  def cleanup
27
- self._connection = self._channel = nil
18
+ conn = Thread.current[:rj_publisher_connection]
19
+ conn.close if conn && conn.status != :not_connected
20
+ Thread.current[:rj_publisher_connection] = nil
28
21
  end
29
22
 
30
23
  def publish_to(routing_key, klass, *params, &block)
@@ -45,25 +38,21 @@ module RabbitJobs
45
38
  raise ArgumentError.new("Need to pass exchange name") if ex.size > 0 && ex[:name].to_s.empty?
46
39
 
47
40
  begin
48
- amqp_connection
49
-
50
- if ex.size > 0
51
- AMQP::Exchange.new(self.amqp_channel, ex[:type] || :direct, ex[:name].to_s, Configuration::DEFAULT_EXCHANGE_PARAMS.merge(ex[:params] || {})) do |exchange|
52
- exchange.publish(payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({key: routing_key.to_sym})) do
53
- yield if block_given?
54
- end
55
- end
41
+ exchange = if ex.size > 0
42
+ exchange_opts = Configuration::DEFAULT_EXCHANGE_PARAMS.merge(ex[:params] || {}).merge({type: (ex[:type] || :direct)})
43
+ amqp_connection.channel.exchange(ex[:name].to_s, exchange_opts)
56
44
  else
57
- self.amqp_channel.default_exchange.publish(payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({key: routing_key.to_sym})) do
58
- yield if block_given?
59
- end
45
+ amqp_connection.channel.default_exchange
60
46
  end
47
+
48
+ exchange.publish(payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({key: routing_key.to_sym}))
61
49
  rescue
62
50
  RJ.logger.warn $!.message
63
51
  RJ.logger.warn $!.backtrace.join("\n")
64
52
  raise $!
65
53
  end
66
54
 
55
+ yield if block_given?
67
56
  true
68
57
  end
69
58
 
@@ -75,20 +64,13 @@ module RabbitJobs
75
64
 
76
65
  routing_keys.map(&:to_sym).each do |routing_key|
77
66
  queue_name = RJ.config.queue_name(routing_key)
78
- self.amqp_channel.queue(queue_name, RJ.config[:queues][routing_key]) do |queue, declare_ok|
79
- queue.status do |messages, consumers|
80
- queue.purge do |ret|
81
- RJ.logger.error "Cannot purge queue #{queue_name}." unless ret.is_a?(AMQ::Protocol::Queue::PurgeOk)
82
- messages_count += ret.message_count
83
- count -= 1
84
- if count == 0
85
- yield(messages_count) if block_given?
86
- end
87
- end
88
- end
89
- end
67
+ queue = amqp_connection.queue(queue_name, RJ.config[:queues][routing_key])
68
+ messages_count += queue.status[:message_count]
69
+ queue.delete
90
70
  end
91
71
 
72
+ yield(messages_count) if block_given?
73
+
92
74
  messages_count
93
75
  end
94
76
  end
@@ -70,7 +70,6 @@ module RabbitJobs
70
70
  end
71
71
 
72
72
  def rufus_scheduler
73
- raise "Cannot start without eventmachine running." unless EM.reactor_running?
74
73
  @rufus_scheduler ||= Rufus::Scheduler.start_new
75
74
  end
76
75
 
@@ -89,30 +88,27 @@ module RabbitJobs
89
88
 
90
89
  $0 = self.process_name || "rj_scheduler"
91
90
 
92
- processed_count = 0
93
- RJ.run do
94
- load_schedule!
95
-
96
- check_shutdown = Proc.new {
97
- if @shutdown
98
- RJ.stop
99
- RJ.logger.info "Stopped."
91
+ RJ.logger.info "Started."
100
92
 
101
- File.delete(self.pidfile) if self.pidfile
102
- end
103
- }
93
+ processed_count = 0
94
+ load_schedule!
104
95
 
96
+ while true
97
+ sleep 1
105
98
  if time > 0
106
- EM.add_timer(time) do
107
- self.shutdown
99
+ time -= 1
100
+ if time == 0
101
+ shutdown
108
102
  end
109
103
  end
110
104
 
111
- EM.add_periodic_timer(1) do
112
- check_shutdown.call
113
- end
105
+ if @shutdown
106
+ RJ.logger.info "Processed jobs: #{processed_count}."
107
+ RJ.logger.info "Stopped."
114
108
 
115
- RJ.logger.info "Started."
109
+ File.delete(self.pidfile) if self.pidfile && File.exists?(self.pidfile)
110
+ return true
111
+ end
116
112
  end
117
113
  rescue => e
118
114
  error = $!
@@ -1,5 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  module RabbitJobs
4
- VERSION = "0.6.2"
4
+ VERSION = "0.7.1"
5
5
  end
@@ -4,18 +4,14 @@ module RabbitJobs
4
4
  class Worker
5
5
  attr_accessor :pidfile, :background, :process_name, :worker_pid
6
6
 
7
- attr_accessor :_connection, :_channel
8
-
9
7
  def amqp_connection
10
- self._connection ||= AmqpHelper.prepare_connection(self._connection)
11
- end
12
-
13
- def amqp_channel
14
- self._channel ||= AmqpHelper.create_channel(self._connection)
8
+ Thread.current[:rj_worker_connection] ||= AmqpHelper.prepare_connection
15
9
  end
16
10
 
17
- def cleanup
18
- self._connection = self._channel = nil
11
+ def self.cleanup
12
+ conn = Thread.current[:rj_worker_connection]
13
+ conn.close if conn && conn.status != :not_connected
14
+ Thread.current[:rj_worker_connection] = nil
19
15
  end
20
16
 
21
17
  def process_message(metadata, payload)
@@ -71,7 +67,7 @@ module RabbitJobs
71
67
  end
72
68
 
73
69
  # Subscribes to queue and working on jobs
74
- def work(time = 0)
70
+ def work(time = -1)
75
71
  return false unless startup
76
72
 
77
73
  $0 = self.process_name || "rj_worker (#{queues.join(', ')})"
@@ -79,59 +75,58 @@ module RabbitJobs
79
75
  processed_count = 0
80
76
 
81
77
  begin
82
- RJ.run do
83
- check_shutdown = Proc.new {
84
- if @shutdown
85
- RJ.stop
86
- RJ.logger.info "Processed jobs: #{processed_count}."
87
- RJ.logger.info "Stopped."
78
+ # amqp_channel.prefetch(1)
79
+
80
+ amqp_channel = amqp_connection.create_channel
81
+
82
+ queue_objects = []
83
+ queues.each do |routing_key|
84
+ RJ.logger.info "Subscribing to #{queue_name(routing_key)}"
85
+
86
+ routing_key = routing_key.to_sym
87
+ queue = amqp_channel.queue(queue_name(routing_key), queue_params(routing_key))
88
+ queue_objects << queue
89
+ explicit_ack = !!queue_params(routing_key)[:ack]
90
+
91
+ queue.subscribe(ack: explicit_ack) do |delivery_info, properties, payload|
92
+ if RJ.run_before_process_message_callbacks
93
+ begin
94
+ processed_count += 1 if process_message(properties, payload)
95
+ rescue
96
+ RJ.logger.warn "process_message failed. payload: #{payload.inspect}"
97
+ RJ.logger.warn $!.inspect
98
+ $!.backtrace.each {|l| RJ.logger.warn l}
99
+ end
100
+ amqp_channel.ack(delivery_info.delivery_tag, false) if explicit_ack
101
+ else
102
+ RJ.logger.warn "before_process_message hook failed, requeuing payload: #{payload.inspect}"
103
+ amqp_channel.nack(delivery_info.delivery_tag, true) if explicit_ack
104
+ end
88
105
 
89
- File.delete(self.pidfile) if self.pidfile && File.exists?(self.pidfile)
106
+ if @shutdown
107
+ queue_objects.each {|q| q.unsubscribe}
90
108
  end
91
- }
92
-
93
- amqp_connection
94
- amqp_channel.prefetch(1)
95
-
96
- queues.each do |routing_key|
97
- routing_key = routing_key.to_sym
98
-
99
- amqp_channel.queue(queue_name(routing_key), queue_params(routing_key)) { |queue, declare_ok|
100
- explicit_ack = !!queue_params(routing_key)[:ack]
101
-
102
- RJ.logger.info "Subscribing to #{queue_name(routing_key)}"
103
- queue.subscribe(ack: explicit_ack) do |metadata, payload|
104
- if RJ.run_before_process_message_callbacks
105
- begin
106
- processed_count += 1 if process_message(metadata, payload)
107
- rescue
108
- RJ.logger.warn "process_message failed. payload: #{payload.inspect}"
109
- RJ.logger.warn $!.inspect
110
- $!.backtrace.each {|l| RJ.logger.warn l}
111
- end
112
- metadata.ack if explicit_ack
113
- else
114
- RJ.logger.warn "before_process_message hook failed, requeuing payload: #{payload.inspect}"
115
- metadata.reject(requeue: true) if explicit_ack
116
- end
117
-
118
- check_shutdown.call
119
- end
120
- }
121
109
  end
110
+ end
122
111
 
112
+ RJ.logger.info "Started."
113
+
114
+ while true
115
+ sleep 1
123
116
  if time > 0
124
- # for debugging
125
- EM.add_timer(time) do
126
- self.shutdown
117
+ time -= 1
118
+ if time == 0
119
+ shutdown
127
120
  end
128
121
  end
129
122
 
130
- EM.add_periodic_timer(1) do
131
- check_shutdown.call
132
- end
123
+ if @shutdown
124
+ RJ.logger.info "Processed jobs: #{processed_count}."
125
+ RJ.logger.info "Stopped."
133
126
 
134
- RJ.logger.info "Started."
127
+ File.delete(self.pidfile) if self.pidfile && File.exists?(self.pidfile)
128
+ return true
129
+ end
135
130
  end
136
131
  rescue
137
132
  error = $!
data/lib/rabbit_jobs.rb CHANGED
@@ -19,82 +19,17 @@ require 'rabbit_jobs/tasks'
19
19
  module RabbitJobs
20
20
  extend self
21
21
 
22
- def start
23
- raise unless block_given?
24
- raise if EM.reactor_running?
25
-
26
- EM.run {
27
- yield
28
- }
29
- end
30
-
31
- alias_method :run, :start
32
-
33
- def stop
34
- RJ::Publisher.cleanup
35
-
36
- if AMQP.connection
37
- AMQP.connection.disconnect {
38
- AMQP.connection = nil
39
- AMQP.channel = nil
40
- EM.stop {
41
- yield if block_given?
42
- }
43
- }
44
- else
45
- EM.stop {
46
- yield if block_given?
47
- }
48
- end
49
- end
50
-
51
- def running?
52
- EM.reactor_running?
53
- end
54
-
55
- def publish_to(routing_key, klass, *params, &block)
56
- if RJ.running?
57
- RJ::Publisher.publish_to(routing_key, klass, *params, &block)
58
- else
59
- RJ.run {
60
- RJ::Publisher.publish_to(routing_key, klass, *params) {
61
- RJ.stop {
62
- yield if block_given?
63
- }
64
- }
65
- }
66
- end
22
+ def publish_to(routing_key, klass, *params)
23
+ RJ::Publisher.publish_to(routing_key, klass, *params)
67
24
  end
68
25
 
69
26
  def direct_publish_to(routing_key, payload, ex = {}, &block)
70
- if RJ.running?
71
- RJ::Publisher.direct_publish_to(routing_key, payload, ex, &block)
72
- else
73
- RJ.run {
74
- RJ::Publisher.direct_publish_to(routing_key, payload, ex) {
75
- RJ.stop {
76
- yield if block_given?
77
- }
78
- }
79
- }
80
- end
27
+ RJ::Publisher.direct_publish_to(routing_key, payload, ex, &block)
28
+ yield if block_given?
81
29
  end
82
30
 
83
31
  def purge_queue(*routing_keys, &block)
84
- if RJ.running?
85
- RJ::Publisher.purge_queue(*routing_keys, &block)
86
- else
87
- messages_count = 0
88
- RJ.run {
89
- RJ::Publisher.purge_queue(*routing_keys) { |count|
90
- messages_count = count
91
- RJ.stop {
92
- yield(count) if block_given?
93
- }
94
- }
95
- }
96
- messages_count
97
- end
32
+ RJ::Publisher.purge_queue(*routing_keys, &block)
98
33
  end
99
34
 
100
35
  attr_writer :logger
data/rabbit_jobs.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = RabbitJobs::VERSION
18
18
 
19
- gem.add_dependency "amqp", "~> 0.9"
19
+ gem.add_dependency "bunny", "0.9.0.pre7"
20
20
  gem.add_dependency "rake"
21
21
  gem.add_dependency "rufus-scheduler", "~> 2.0"
22
22
  gem.add_dependency "rails", ">= 3.0"
@@ -42,19 +42,11 @@ describe RabbitJobs::Publisher do
42
42
  count = 1000
43
43
  published = 0
44
44
  time = Benchmark.measure {
45
- RJ.run {
46
- count.times {
47
- RJ.publish_to(:rspec_queue, TestJob) {
48
- published += 1
49
- if published == count
50
- RJ.purge_queue(:rspec_queue, :rspec_queue2, :rspec_queue3) { |removed|
51
- removed.should == 1000
52
- RJ.stop
53
- }
54
- end
55
- }
56
- }
45
+ count.times {
46
+ RJ.publish_to(:rspec_queue, TestJob)
57
47
  }
48
+ removed = RJ.purge_queue(:rspec_queue, :rspec_queue2, :rspec_queue3)
49
+ removed.should == 1000
58
50
  }
59
51
  puts time
60
52
  end
@@ -1,7 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require 'spec_helper'
3
- require 'timecop'
4
- require 'eventmachine'
5
3
 
6
4
  describe RabbitJobs::Worker do
7
5
  it 'should listen for messages' do
@@ -10,36 +8,22 @@ describe RabbitJobs::Worker do
10
8
  c.queue 'rspec_durable_queue', auto_delete: false, durable: true, ack: true
11
9
  end
12
10
 
13
- RJ.run {
14
- RJ::Publisher.purge_queue('rspec_durable_queue') {
15
- count = 5
16
- 5.times {
17
- RabbitJobs.publish(PrintTimeJob, Time.now) {
18
- count -= 1
19
- if count <= 0
20
- Timecop.freeze(Time.now - 4600) {
21
- count = 5
22
- 5.times {
23
- RabbitJobs.publish(JobWithExpire) {
24
- count -= 1
25
- if count <= 0
26
- RabbitJobs.publish(JobWithErrorHook) {
27
- RJ.stop
28
- }
29
- end
30
- }
31
- }
32
- }
33
- end
34
- }
35
- }
36
- }
11
+ RJ::Publisher.purge_queue('rspec_durable_queue')
12
+ count = 5
13
+ 5.times {
14
+ RabbitJobs.publish(PrintTimeJob, Time.now)
37
15
  }
38
16
 
17
+ Timecop.freeze(Time.now - 4600) {
18
+ 5.times { RabbitJobs.publish(JobWithExpire) }
19
+ }
20
+
21
+ RabbitJobs.publish(JobWithErrorHook)
22
+
39
23
  worker = RabbitJobs::Worker.new
40
24
 
41
25
  worker.work(1) # work for 1 second
42
- RJ.run { RJ::Publisher.purge_queue('rspec_durable_queue') { RJ.stop } }
26
+ RJ::Publisher.purge_queue('rspec_durable_queue')
43
27
  end
44
28
 
45
29
  it 'should allow to publish jobs from worker' do
@@ -48,13 +32,8 @@ describe RabbitJobs::Worker do
48
32
  c.queue 'rspec_durable_queue', auto_delete: false, durable: true, ack: true
49
33
  end
50
34
 
51
- RJ.run {
52
- RJ::Publisher.purge_queue('rspec_durable_queue') {
53
- RabbitJobs.publish(JobWithPublish) {
54
- RJ.stop
55
- }
56
- }
57
- }
35
+ RJ::Publisher.purge_queue('rspec_durable_queue')
36
+ RabbitJobs.publish(JobWithPublish)
58
37
 
59
38
  worker = RabbitJobs::Worker.new
60
39
 
data/spec/spec_helper.rb CHANGED
@@ -5,9 +5,9 @@ SimpleCov.start do
5
5
  end
6
6
 
7
7
  require 'rr'
8
+ require 'timecop'
8
9
 
9
10
  require 'rabbit_jobs'
10
-
11
11
  require 'fixtures/jobs'
12
12
 
13
13
  RSpec.configure do |config|
@@ -73,7 +73,7 @@ describe RabbitJobs::Configuration do
73
73
 
74
74
  it 'returns settings on some methods' do
75
75
  RabbitJobs.config.error_log == true
76
- RabbitJobs.config.servers.should == ['amqp://localhost/']
76
+ RabbitJobs.config.server.should == 'amqp://localhost/'
77
77
  RabbitJobs.config.routing_keys.should == []
78
78
  RabbitJobs.config.prefix.should == 'rabbit_jobs'
79
79
  RabbitJobs.config.queue_name('default').should == 'rabbit_jobs#default'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbit_jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,19 +12,19 @@ cert_chain: []
12
12
  date: 2013-03-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: amqp
16
- requirement: &8850920 !ruby/object:Gem::Requirement
15
+ name: bunny
16
+ requirement: &21380680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - =
20
20
  - !ruby/object:Gem::Version
21
- version: '0.9'
21
+ version: 0.9.0.pre7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *8850920
24
+ version_requirements: *21380680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &8863540 !ruby/object:Gem::Requirement
27
+ requirement: &21379160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *8863540
35
+ version_requirements: *21379160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rufus-scheduler
38
- requirement: &8882600 !ruby/object:Gem::Requirement
38
+ requirement: &21374960 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '2.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *8882600
46
+ version_requirements: *21374960
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rails
49
- requirement: &8879640 !ruby/object:Gem::Requirement
49
+ requirement: &21399100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '3.0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *8879640
57
+ version_requirements: *21399100
58
58
  description: Background jobs on RabbitMQ
59
59
  email:
60
60
  - lazureykis@gmail.com
@@ -111,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
111
  version: '0'
112
112
  segments:
113
113
  - 0
114
- hash: 172284272665081272
114
+ hash: 2351435873662003643
115
115
  required_rubygems_version: !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  version: '0'
121
121
  segments:
122
122
  - 0
123
- hash: 172284272665081272
123
+ hash: 2351435873662003643
124
124
  requirements: []
125
125
  rubyforge_project:
126
126
  rubygems_version: 1.8.11