activemessaging 0.10.0 → 0.11.0
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/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
|