daemon_objects 0.1.5 → 0.1.6
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/daemon_objects.gemspec +1 -2
- data/lib/daemon_objects.rb +1 -1
- data/lib/daemon_objects/amqp/runner.rb +18 -18
- data/lib/daemon_objects/amqp/worker.rb +8 -8
- data/lib/daemon_objects/version.rb +1 -1
- data/spec/lib/daemon_objects/base_spec.rb +13 -16
- metadata +5 -21
data/daemon_objects.gemspec
CHANGED
@@ -20,10 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency "daemons", "~> 1.1"
|
22
22
|
spec.add_dependency "activesupport", "~> 3.2"
|
23
|
-
spec.add_dependency "
|
23
|
+
spec.add_dependency "bunny", "~> 1.1.0"
|
24
24
|
spec.add_dependency "rake"
|
25
25
|
|
26
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
27
26
|
spec.add_development_dependency "rspec"
|
28
27
|
spec.add_development_dependency "pry-nav"
|
29
28
|
end
|
data/lib/daemon_objects.rb
CHANGED
@@ -8,29 +8,29 @@ module DaemonObjects::AmqpSupport
|
|
8
8
|
def run
|
9
9
|
logger.info "Preparing to start the AMQP watcher."
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
connection = Bunny.new("#{endpoint.gsub("/", "%2F")}")
|
12
|
+
connection.start
|
13
13
|
|
14
|
-
|
15
|
-
channel.prefetch(1) if prefetch
|
14
|
+
logger.info "Starting up the AMQP watcher."
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
get_consumer,
|
20
|
-
{
|
21
|
-
:queue_name => queue,
|
22
|
-
:logger => logger,
|
23
|
-
:arguments => arguments
|
24
|
-
})
|
16
|
+
channel = connection.create_channel
|
17
|
+
channel.prefetch(1) if prefetch
|
25
18
|
|
26
|
-
|
19
|
+
worker = worker_class.new(
|
20
|
+
channel,
|
21
|
+
get_consumer,
|
22
|
+
{
|
23
|
+
:queue_name => queue,
|
24
|
+
:logger => logger,
|
25
|
+
:arguments => arguments
|
26
|
+
})
|
27
|
+
worker.start
|
27
28
|
|
28
|
-
|
29
|
+
logger.info "AMQP worker started"
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
Signal.trap("INT") do
|
32
|
+
logger.info "Received signal 'INT'. Exiting process"
|
33
|
+
connection.close { EventMachine.stop }
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -27,17 +27,17 @@ class DaemonObjects::Amqp::Worker
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def start
|
30
|
-
queue = channel.queue(queue_name, :durable => true, :
|
30
|
+
queue = channel.queue(queue_name, :durable => true, :arguments => arguments)
|
31
31
|
queue.bind(exchange, :routing_key => routing_key) if exchange
|
32
32
|
|
33
|
-
queue.subscribe(:ack => true) do |
|
34
|
-
exception = handle_message(
|
33
|
+
queue.subscribe(:block => true, :ack => true) do |delivery_info, properties, payload|
|
34
|
+
exception = handle_message(channel, delivery_info.delivery_tag, payload)
|
35
35
|
|
36
36
|
response_payload = consumer.get_response(payload, exception) if consumer.respond_to?(:get_response)
|
37
37
|
if response_payload
|
38
38
|
channel.default_exchange.publish(response_payload.to_json,
|
39
|
-
:routing_key =>
|
40
|
-
:correlation_id =>
|
39
|
+
:routing_key => delivery_info.routing_key,
|
40
|
+
:correlation_id => properties.message_id)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -46,12 +46,12 @@ class DaemonObjects::Amqp::Worker
|
|
46
46
|
raise StandardError, "ERROR channel-level exception: code = #{channel_close.reply_code}, message = #{channel_close.reply_text}"
|
47
47
|
end
|
48
48
|
|
49
|
-
def handle_message(
|
49
|
+
def handle_message(channel, delivery_tag, payload)
|
50
50
|
response = consumer.handle_message (payload)
|
51
|
-
|
51
|
+
channel.acknowledge(delivery_tag, false)
|
52
52
|
response
|
53
53
|
rescue Exception => e
|
54
|
-
|
54
|
+
channel.reject(delivery_tag)
|
55
55
|
logger.error "Error occurred handling message, the payload was: #{payload}, the error was: '#{e}'."
|
56
56
|
e
|
57
57
|
end
|
@@ -72,9 +72,9 @@ describe DaemonObjects::Base do
|
|
72
72
|
let(:endpoint){ }
|
73
73
|
|
74
74
|
before :each do
|
75
|
-
MyWorker = Class.new do
|
75
|
+
MyWorker = Class.new(DaemonObjects::Amqp::Worker) do
|
76
76
|
def initialize(*args); end
|
77
|
-
def
|
77
|
+
def start; end
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -90,7 +90,8 @@ describe DaemonObjects::Base do
|
|
90
90
|
:worker_class => MyWorker
|
91
91
|
end
|
92
92
|
|
93
|
-
|
93
|
+
bunny = double(Bunny).as_null_object
|
94
|
+
Bunny.should_receive(:new).with('amqp:%2F%2Flocalhost:4567').and_return(bunny)
|
94
95
|
MyDaemon.run
|
95
96
|
end
|
96
97
|
|
@@ -98,7 +99,7 @@ describe DaemonObjects::Base do
|
|
98
99
|
MyConsumer = Class.new(DaemonObjects::ConsumerBase)
|
99
100
|
MyDaemon = Class.new(DaemonObjects::Base)
|
100
101
|
|
101
|
-
|
102
|
+
Bunny.should_not_receive(:new)
|
102
103
|
MyDaemon.run
|
103
104
|
|
104
105
|
end
|
@@ -111,12 +112,10 @@ describe DaemonObjects::Base do
|
|
111
112
|
:worker_class => MyWorker
|
112
113
|
end
|
113
114
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
channel = double(AMQP::Channel)
|
119
|
-
AMQP::Channel.stub(:new).and_return(channel)
|
115
|
+
bunny = double(Bunny).as_null_object
|
116
|
+
Bunny.stub(:new).and_return(bunny)
|
117
|
+
channel = double(Bunny::Channel)
|
118
|
+
bunny.stub(:create_channel).and_return(channel)
|
120
119
|
channel.should_not_receive(:prefetch)
|
121
120
|
|
122
121
|
worker = MyWorker.new
|
@@ -144,14 +143,12 @@ describe DaemonObjects::Base do
|
|
144
143
|
:worker_class => MyWorker
|
145
144
|
end
|
146
145
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
channel = double(AMQP::Channel)
|
146
|
+
bunny = double(Bunny).as_null_object
|
147
|
+
Bunny.stub(:new).and_return(bunny)
|
148
|
+
channel = double(Bunny::Channel)
|
152
149
|
channel.should_receive(:prefetch).with(1)
|
153
150
|
|
154
|
-
|
151
|
+
bunny.stub(:create_channel).and_return(channel)
|
155
152
|
|
156
153
|
worker = MyWorker.new
|
157
154
|
consumer = MyDaemon.get_consumer
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daemon_objects
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: daemons
|
@@ -44,13 +44,13 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '3.2'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: bunny
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 1.1.0
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 1.1.0
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: rake
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,22 +75,6 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: bundler
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ~>
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '1.3'
|
86
|
-
type: :development
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '1.3'
|
94
78
|
- !ruby/object:Gem::Dependency
|
95
79
|
name: rspec
|
96
80
|
requirement: !ruby/object:Gem::Requirement
|