rabbit_jobs 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/rabbit_jobs/amqp_helpers.rb +6 -8
- data/lib/rabbit_jobs/job.rb +6 -0
- data/lib/rabbit_jobs/publisher.rb +26 -14
- data/lib/rabbit_jobs/version.rb +1 -1
- data/lib/rabbit_jobs/worker.rb +10 -3
- data/lib/rabbit_jobs.rb +1 -3
- data/spec/integration/publisher_spec.rb +5 -0
- metadata +9 -9
@@ -7,7 +7,7 @@ module RabbitJobs
|
|
7
7
|
def amqp_with_exchange(&block)
|
8
8
|
raise ArgumentError unless block
|
9
9
|
|
10
|
-
AMQP.start(host:
|
10
|
+
AMQP.start(host: RJ.config.host) do |connection|
|
11
11
|
channel = AMQP::Channel.new(connection)
|
12
12
|
|
13
13
|
channel.on_error do |ch, channel_close|
|
@@ -15,7 +15,7 @@ module RabbitJobs
|
|
15
15
|
connection.close { EM.stop }
|
16
16
|
end
|
17
17
|
|
18
|
-
exchange = channel.direct(
|
18
|
+
exchange = channel.direct(RJ.config[:exchange], RJ.config[:exchange_params])
|
19
19
|
|
20
20
|
# go work
|
21
21
|
block.call(connection, exchange)
|
@@ -25,7 +25,7 @@ module RabbitJobs
|
|
25
25
|
def em_amqp_with_exchange(&block)
|
26
26
|
raise ArgumentError unless block
|
27
27
|
|
28
|
-
connection = AMQP.connect(host:
|
28
|
+
connection = AMQP.connect(host: RJ.config.host)
|
29
29
|
channel = AMQP::Channel.new(connection)
|
30
30
|
|
31
31
|
channel.on_error do |ch, channel_close|
|
@@ -33,19 +33,17 @@ module RabbitJobs
|
|
33
33
|
connection.close { EM.stop }
|
34
34
|
end
|
35
35
|
|
36
|
-
exchange = channel.direct(
|
36
|
+
exchange = channel.direct(RJ.config[:exchange], RJ.config[:exchange_params])
|
37
37
|
|
38
38
|
# go work
|
39
39
|
block.call(connection, exchange)
|
40
40
|
end
|
41
41
|
|
42
42
|
def amqp_with_queue(routing_key, &block)
|
43
|
-
|
44
43
|
raise ArgumentError unless routing_key && block
|
45
44
|
|
46
45
|
amqp_with_exchange do |connection, exchange|
|
47
|
-
queue = exchange
|
48
|
-
queue.bind(exchange, :routing_key => routing_key)
|
46
|
+
queue = make_queue(exchange, routing_key.to_s)
|
49
47
|
|
50
48
|
# go work
|
51
49
|
block.call(connection, queue)
|
@@ -53,7 +51,7 @@ module RabbitJobs
|
|
53
51
|
end
|
54
52
|
|
55
53
|
def make_queue(exchange, routing_key)
|
56
|
-
queue = exchange.channel.queue(
|
54
|
+
queue = exchange.channel.queue(RJ.config.queue_name(routing_key), RJ.config[:queues][routing_key])
|
57
55
|
queue.bind(exchange, :routing_key => routing_key)
|
58
56
|
queue
|
59
57
|
end
|
data/lib/rabbit_jobs/job.rb
CHANGED
@@ -26,6 +26,12 @@ module RabbitJobs::Job
|
|
26
26
|
yield if block_given?
|
27
27
|
else
|
28
28
|
begin
|
29
|
+
if defined?(ActiveRecord::Base)
|
30
|
+
ActiveRecord::Base.establish_connection
|
31
|
+
end
|
32
|
+
if defined?(MongoMapper)
|
33
|
+
MongoMapper.database.connection.connect_to_master
|
34
|
+
end
|
29
35
|
# log 'before perform'
|
30
36
|
self.class.perform(*params)
|
31
37
|
# log 'after perform'
|
@@ -10,7 +10,7 @@ module RabbitJobs
|
|
10
10
|
extend AmqpHelpers
|
11
11
|
|
12
12
|
def publish(klass, opts = {}, *params)
|
13
|
-
key =
|
13
|
+
key = RJ.config.routing_keys.first
|
14
14
|
publish_to(key, klass, opts, *params)
|
15
15
|
end
|
16
16
|
|
@@ -31,12 +31,12 @@ module RabbitJobs
|
|
31
31
|
def publish_job_to(routing_key, job)
|
32
32
|
amqp_with_exchange do |connection, exchange|
|
33
33
|
|
34
|
-
queue = make_queue(exchange, routing_key)
|
34
|
+
queue = make_queue(exchange, routing_key.to_s)
|
35
35
|
|
36
36
|
job.opts['created_at'] = Time.now.to_i
|
37
37
|
|
38
38
|
payload = job.payload
|
39
|
-
exchange.publish(job.payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({routing_key: routing_key})) {
|
39
|
+
exchange.publish(job.payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({routing_key: routing_key.to_s})) {
|
40
40
|
connection.close {
|
41
41
|
EM.stop
|
42
42
|
}
|
@@ -46,29 +46,41 @@ module RabbitJobs
|
|
46
46
|
|
47
47
|
def em_publish_job_to(routing_key, job)
|
48
48
|
em_amqp_with_exchange do |connection, exchange|
|
49
|
-
queue = make_queue(exchange, routing_key)
|
49
|
+
queue = make_queue(exchange, routing_key.to_s)
|
50
50
|
|
51
51
|
job.opts['created_at'] = Time.now.to_i
|
52
52
|
|
53
53
|
payload = job.payload
|
54
|
-
exchange.publish(job.payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({routing_key: routing_key})) {
|
54
|
+
exchange.publish(job.payload, Configuration::DEFAULT_MESSAGE_PARAMS.merge({routing_key: routing_key.to_s})) {
|
55
55
|
connection.close {
|
56
56
|
}
|
57
57
|
}
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
def purge_queue(
|
62
|
-
raise ArgumentError unless
|
61
|
+
def purge_queue(*routing_keys)
|
62
|
+
raise ArgumentError unless routing_keys && routing_keys.count > 0
|
63
63
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
64
|
+
amqp_with_exchange do |connection, exchange|
|
65
|
+
queues_purged = routing_keys.count
|
66
|
+
|
67
|
+
messages_count = 0
|
68
|
+
routing_keys.each do |routing_key|
|
69
|
+
queue = exchange.channel.queue(RabbitJobs.config.queue_name(routing_key), RabbitJobs.config[:queues][routing_key])
|
70
|
+
queue.bind(exchange, :routing_key => routing_key)
|
71
|
+
|
72
|
+
queue.status do |number_of_messages, number_of_consumers|
|
73
|
+
messages_count += number_of_messages
|
74
|
+
queue.purge {
|
75
|
+
queues_purged -= 1
|
76
|
+
if queues_purged == 0
|
77
|
+
connection.close {
|
78
|
+
EM.stop
|
79
|
+
return messages_count
|
80
|
+
}
|
81
|
+
end
|
70
82
|
}
|
71
|
-
|
83
|
+
end
|
72
84
|
end
|
73
85
|
end
|
74
86
|
end
|
data/lib/rabbit_jobs/version.rb
CHANGED
data/lib/rabbit_jobs/worker.rb
CHANGED
@@ -54,13 +54,20 @@ module RabbitJobs
|
|
54
54
|
|
55
55
|
log "Worker ##{Process.pid} <= #{exchange.name}##{routing_key}"
|
56
56
|
|
57
|
-
|
58
|
-
|
57
|
+
explicit_ack = !!RJ.config[:queues][routing_key][:ack]
|
58
|
+
|
59
|
+
queue.subscribe(ack: explicit_ack) do |metadata, payload|
|
60
|
+
@job = RJ::Job.parse(payload)
|
61
|
+
|
59
62
|
unless @job.expired?
|
60
63
|
@job.run_perform
|
61
|
-
metadata.ack
|
62
64
|
processed_count += 1
|
65
|
+
else
|
66
|
+
log "Job expired: #{@job.inspect}"
|
63
67
|
end
|
68
|
+
|
69
|
+
metadata.ack if explicit_ack
|
70
|
+
|
64
71
|
check_shutdown.call
|
65
72
|
end
|
66
73
|
end
|
data/lib/rabbit_jobs.rb
CHANGED
@@ -16,4 +16,9 @@ describe RabbitJobs::Publisher do
|
|
16
16
|
RabbitJobs.publish(TestJob, nil, 'some', 'other', 'params')
|
17
17
|
RabbitJobs::Publisher.purge_queue('rspec_queue').should == 1
|
18
18
|
end
|
19
|
+
|
20
|
+
it 'should accept symbol as queue name' do
|
21
|
+
RabbitJobs.publish_to(:rspec_queue, TestJob)
|
22
|
+
RabbitJobs::Publisher.purge_queue('rspec_queue').should == 1
|
23
|
+
end
|
19
24
|
end
|
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.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: amqp
|
16
|
-
requirement: &
|
16
|
+
requirement: &70275283417720 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.9'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70275283417720
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70275283417300 !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: *
|
35
|
+
version_requirements: *70275283417300
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rufus-scheduler
|
38
|
-
requirement: &
|
38
|
+
requirement: &70275283416760 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '2.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70275283416760
|
47
47
|
description: Background jobs on RabbitMQ
|
48
48
|
email:
|
49
49
|
- lazureykis@gmail.com
|
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
105
|
version: '0'
|
106
106
|
requirements: []
|
107
107
|
rubyforge_project:
|
108
|
-
rubygems_version: 1.8.
|
108
|
+
rubygems_version: 1.8.15
|
109
109
|
signing_key:
|
110
110
|
specification_version: 3
|
111
111
|
summary: Background jobs on RabbitMQ
|