activemessaging 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/activemessaging.gemspec +2 -2
- data/lib/activemessaging.rb +4 -4
- data/lib/activemessaging/adapters/asqs.rb +14 -0
- data/lib/activemessaging/gateway.rb +6 -2
- data/lib/activemessaging/threaded_poller.rb +27 -10
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.11.0
|
data/activemessaging.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "activemessaging"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.11.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jon Tirsen", "Andrew Kuklewicz", "Olle Jonsson", "Sylvain Perez", "Cliff Moon", "Uwe Kubosch"]
|
12
|
-
s.date = "2012-07
|
12
|
+
s.date = "2012-08-07"
|
13
13
|
s.description = "ActiveMessaging is an attempt to bring the simplicity and elegance of rails development to the world of messaging. Messaging, (or event-driven architecture) is widely used for enterprise integration, with frameworks such as Java's JMS, and products such as ActiveMQ, Tibco, IBM MQSeries, etc. Now supporting Rails 3 as of version 0.8.0."
|
14
14
|
s.email = "activemessaging-discuss@googlegroups.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/activemessaging.rb
CHANGED
@@ -36,7 +36,7 @@ module ActiveMessaging
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def self.app_root
|
39
|
-
@@app_root ||= (ENV['APP_ROOT'] || (defined?(::Rails) && ::Rails.root) || ENV['RAILS_ROOT'] || File.
|
39
|
+
@@app_root ||= (ENV['APP_ROOT'] || (defined?(::Rails) && ::Rails.root) || ENV['RAILS_ROOT'] || File.expand_path(Dir.pwd))
|
40
40
|
end
|
41
41
|
|
42
42
|
def self.app_env
|
@@ -74,10 +74,10 @@ module ActiveMessaging
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def self.load_processors(first=true)
|
77
|
-
logger.info "ActiveMessaging: Loading #{app_root}/app/processors/
|
78
|
-
load "#{app_root}/app/processors/
|
77
|
+
logger.info "ActiveMessaging: Loading #{app_root}/app/processors/application_processor.rb" if first
|
78
|
+
load "#{app_root}/app/processors/application_processor.rb" if File.exist?("#{app_root}/app/processors/application_processor.rb")
|
79
79
|
Dir["#{app_root}/app/processors/*.rb"].each do |f|
|
80
|
-
unless f.match(/\/
|
80
|
+
unless f.match(/\/application_processor.rb/)
|
81
81
|
logger.info "ActiveMessaging: Loading #{f}" if first
|
82
82
|
load f
|
83
83
|
end
|
@@ -95,6 +95,20 @@ module ActiveMessaging
|
|
95
95
|
send_messsage queue, message_body
|
96
96
|
end
|
97
97
|
|
98
|
+
# def receive(options={})
|
99
|
+
# while true
|
100
|
+
# # this will try all the queues once, by priority
|
101
|
+
# # returns nil if nothing there
|
102
|
+
# message = receive_message(options)
|
103
|
+
|
104
|
+
# if message
|
105
|
+
# return message
|
106
|
+
# else
|
107
|
+
# sleep(poll_interval)
|
108
|
+
# end
|
109
|
+
# end
|
110
|
+
# end
|
111
|
+
|
98
112
|
# new receive respects priorities
|
99
113
|
def receive(options={})
|
100
114
|
message = nil
|
@@ -49,8 +49,12 @@ module ActiveMessaging
|
|
49
49
|
@guard.synchronize {
|
50
50
|
dispatch Thread.current[:message]
|
51
51
|
}
|
52
|
+
Thread.current[:message] = nil
|
53
|
+
else
|
54
|
+
# if there is no message at all, sleep
|
55
|
+
# maybe this should be configurable
|
56
|
+
sleep(1)
|
52
57
|
end
|
53
|
-
Thread.current[:message] = nil
|
54
58
|
end
|
55
59
|
Thread.pass
|
56
60
|
end
|
@@ -63,7 +67,7 @@ module ActiveMessaging
|
|
63
67
|
living = false
|
64
68
|
@connection_threads.each { |name, thread| living ||= thread.alive? }
|
65
69
|
@running = living
|
66
|
-
sleep
|
70
|
+
sleep(1)
|
67
71
|
end
|
68
72
|
ActiveMessaging.logger.error "All connection threads have died..."
|
69
73
|
rescue Interrupt
|
@@ -73,9 +73,16 @@ module ActiveMessaging
|
|
73
73
|
# indicates to all busy workers not to pick up another messages, but does not interrupt
|
74
74
|
# also indicates to the message receiver to stop getting more messages
|
75
75
|
self.running = false
|
76
|
-
|
76
|
+
|
77
77
|
# tell each waiting worker to shut down. Running ones will be allowed to finish
|
78
|
-
|
78
|
+
receiver.terminate! if receiver.alive?
|
79
|
+
logger.info "ActiveMessaging::ThreadedPoller receiver terminated"
|
80
|
+
|
81
|
+
workers.each { |w| w.terminate! if w.alive? }
|
82
|
+
logger.info "ActiveMessaging::ThreadedPoller workers terminated"
|
83
|
+
|
84
|
+
|
85
|
+
after(0) { signal(:shutdown) } if stopped?
|
79
86
|
end
|
80
87
|
|
81
88
|
# recursive method, uses celluloid 'after' to keep calling
|
@@ -105,16 +112,16 @@ module ActiveMessaging
|
|
105
112
|
worker.terminate if worker.alive?
|
106
113
|
if busy.empty?
|
107
114
|
logger.info "all executed: signal stopped"
|
108
|
-
|
115
|
+
after(0) { signal(:shutdown) }
|
109
116
|
end
|
110
117
|
end
|
111
118
|
end
|
112
119
|
|
113
120
|
def died(worker, reason)
|
114
|
-
logger.info "uh oh, #{worker.inspect} died because of #{reason.class}"
|
115
121
|
busy.delete(worker)
|
116
122
|
|
117
123
|
if running
|
124
|
+
logger.info "uh oh, #{worker.inspect} died because of #{reason.class}"
|
118
125
|
worker = Worker.new_link(current_actor)
|
119
126
|
workers << worker
|
120
127
|
receive(worker)
|
@@ -122,13 +129,13 @@ module ActiveMessaging
|
|
122
129
|
logger.info "check to see if busy is empty: #{busy.inspect}"
|
123
130
|
if busy.empty?
|
124
131
|
logger.info "all died: signal stopped"
|
125
|
-
after(0){
|
132
|
+
after(0){ signal(:shutdown) }
|
126
133
|
end
|
127
134
|
end
|
128
135
|
end
|
129
136
|
|
130
137
|
def stopped?
|
131
|
-
|
138
|
+
(!running && busy.empty?)
|
132
139
|
end
|
133
140
|
|
134
141
|
def logger; ActiveMessaging.logger; end
|
@@ -153,20 +160,25 @@ module ActiveMessaging
|
|
153
160
|
def receive(worker)
|
154
161
|
return unless poller.running
|
155
162
|
|
163
|
+
# logger.debug("***** MessageReceiver calling receive")
|
156
164
|
message = self.connection.receive(worker.options)
|
165
|
+
# logger.debug("***** MessageReceiver receive returned")
|
157
166
|
|
158
167
|
if message
|
159
168
|
logger.debug("ActiveMessaging::MessageReceiver.receive: message:'#{message.inspect}'")
|
160
169
|
poller.dispatch!(message, worker)
|
161
170
|
else
|
162
|
-
|
171
|
+
if (!poller || !poller.alive? || !poller.running)
|
172
|
+
logger.debug("ActiveMessaging::MessageReceiver.receive: terminate")
|
173
|
+
self.terminate
|
174
|
+
end
|
163
175
|
logger.debug("ActiveMessaging::MessageReceiver.receive: no message, retry in #{pause} sec")
|
164
176
|
after(pause) { receive(worker) }
|
165
177
|
end
|
166
178
|
|
167
179
|
end
|
168
180
|
|
169
|
-
def logger; ActiveMessaging.logger; end
|
181
|
+
def logger; ::ActiveMessaging.logger; end
|
170
182
|
end
|
171
183
|
|
172
184
|
class Worker
|
@@ -180,11 +192,16 @@ module ActiveMessaging
|
|
180
192
|
end
|
181
193
|
|
182
194
|
def execute(message)
|
183
|
-
|
195
|
+
begin
|
196
|
+
::ActiveMessaging::Gateway.dispatch(message)
|
197
|
+
ensure
|
198
|
+
::ActiveRecord::Base.clear_active_connections! if defined?(::ActiveRecord)
|
199
|
+
end
|
200
|
+
|
184
201
|
poller.executed!(current_actor)
|
185
202
|
end
|
186
203
|
|
187
|
-
def logger; ActiveMessaging.logger; end
|
204
|
+
def logger; ::ActiveMessaging.logger; end
|
188
205
|
|
189
206
|
end
|
190
207
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemessaging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2012-07
|
17
|
+
date: 2012-08-07 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: activesupport
|