gz_activemessaging 0.13.1
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.
- checksums.yaml +15 -0
- data/.travis.yml +40 -0
- data/Appraisals +19 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +87 -0
- data/README.md +27 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/activemessaging.gemspec +137 -0
- data/gemfiles/activesupport23.gemfile +10 -0
- data/gemfiles/activesupport23.gemfile.lock +51 -0
- data/gemfiles/activesupport30.gemfile +11 -0
- data/gemfiles/activesupport30.gemfile.lock +53 -0
- data/gemfiles/activesupport31.gemfile +11 -0
- data/gemfiles/activesupport31.gemfile.lock +55 -0
- data/gemfiles/activesupport32.gemfile +10 -0
- data/gemfiles/activesupport32.gemfile.lock +55 -0
- data/generators/a13g_test_harness/a13g_test_harness_generator.rb +19 -0
- data/generators/a13g_test_harness/templates/active_messaging_test.rhtml +13 -0
- data/generators/a13g_test_harness/templates/active_messaging_test_controller.rb +29 -0
- data/generators/a13g_test_harness/templates/index.rhtml +17 -0
- data/generators/filter/USAGE +0 -0
- data/generators/filter/filter_generator.rb +19 -0
- data/generators/filter/templates/filter.rb +12 -0
- data/generators/filter/templates/filter_test.rb +28 -0
- data/generators/processor/USAGE +8 -0
- data/generators/processor/processor_generator.rb +31 -0
- data/generators/processor/templates/application_processor.rb +18 -0
- data/generators/processor/templates/broker.yml +140 -0
- data/generators/processor/templates/jruby_poller +117 -0
- data/generators/processor/templates/messaging.rb +12 -0
- data/generators/processor/templates/poller +25 -0
- data/generators/processor/templates/poller.rb +26 -0
- data/generators/processor/templates/processor.rb +8 -0
- data/generators/processor/templates/processor_test.rb +20 -0
- data/generators/tracer/USAGE +8 -0
- data/generators/tracer/templates/controller.rb +14 -0
- data/generators/tracer/templates/helper.rb +2 -0
- data/generators/tracer/templates/index.rhtml +4 -0
- data/generators/tracer/templates/layout.rhtml +16 -0
- data/generators/tracer/templates/trace_processor.rb +100 -0
- data/generators/tracer/tracer_generator.rb +25 -0
- data/init.rb +1 -0
- data/lib/activemessaging.rb +133 -0
- data/lib/activemessaging/adapter.rb +20 -0
- data/lib/activemessaging/adapters/amqp.rb +215 -0
- data/lib/activemessaging/adapters/asqs.rb +487 -0
- data/lib/activemessaging/adapters/base.rb +71 -0
- data/lib/activemessaging/adapters/beanstalk.rb +88 -0
- data/lib/activemessaging/adapters/jms.rb +243 -0
- data/lib/activemessaging/adapters/reliable_msg.rb +186 -0
- data/lib/activemessaging/adapters/stomp.rb +212 -0
- data/lib/activemessaging/adapters/synch.rb +95 -0
- data/lib/activemessaging/adapters/test.rb +137 -0
- data/lib/activemessaging/adapters/wmq.rb +193 -0
- data/lib/activemessaging/base_message.rb +28 -0
- data/lib/activemessaging/filter.rb +29 -0
- data/lib/activemessaging/gateway.rb +429 -0
- data/lib/activemessaging/message_sender.rb +30 -0
- data/lib/activemessaging/named_base.rb +54 -0
- data/lib/activemessaging/processor.rb +44 -0
- data/lib/activemessaging/railtie.rb +26 -0
- data/lib/activemessaging/test_helper.rb +189 -0
- data/lib/activemessaging/threaded_poller.rb +234 -0
- data/lib/activemessaging/trace_filter.rb +34 -0
- data/lib/generators/active_messaging/install/USAGE +21 -0
- data/lib/generators/active_messaging/install/install_generator.rb +39 -0
- data/lib/generators/active_messaging/install/templates/application_processor.rb +18 -0
- data/lib/generators/active_messaging/install/templates/broker.yml +139 -0
- data/lib/generators/active_messaging/install/templates/poller +24 -0
- data/lib/generators/active_messaging/install/templates/poller.rb +22 -0
- data/lib/generators/active_messaging/install/templates/threaded_poller +46 -0
- data/lib/generators/active_messaging/processor/USAGE +2 -0
- data/lib/generators/active_messaging/processor/processor_generator.rb +39 -0
- data/lib/generators/active_messaging/processor/templates/messaging.rb +12 -0
- data/lib/generators/active_messaging/processor/templates/processor.rb +8 -0
- data/lib/generators/active_messaging/processor/templates/processor_spec.rb +24 -0
- data/lib/generators/active_messaging/processor/templates/processor_test.rb +20 -0
- data/lib/tasks/start_consumers.rake +8 -0
- data/poller.rb +14 -0
- data/test/all_tests.rb +10 -0
- data/test/app/config/broker.yml +4 -0
- data/test/asqs_test.rb +125 -0
- data/test/config_test.rb +42 -0
- data/test/filter_test.rb +131 -0
- data/test/gateway_test.rb +220 -0
- data/test/jms_test.rb +64 -0
- data/test/reliable_msg_test.rb +83 -0
- data/test/stomp_test.rb +168 -0
- data/test/test_helper.rb +36 -0
- data/test/tracer_test.rb +57 -0
- metadata +202 -0
@@ -0,0 +1,117 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
JRUBY_CMD=`which jruby`
|
4
|
+
RAILS_ROOT="$(dirname $0)/.."
|
5
|
+
POLLER_RB="$RAILS_ROOT/vendor/plugins/activemessaging/poller.rb"
|
6
|
+
OUT="$RAILS_ROOT/tmp/poller.output"
|
7
|
+
PID_FILE="$RAILS_ROOT/tmp/poller0.pid"
|
8
|
+
|
9
|
+
if [ -z "$JRUBY_CMD" ] ; then
|
10
|
+
echo "Could not find jruby on your path."
|
11
|
+
exit 1
|
12
|
+
fi
|
13
|
+
|
14
|
+
if [ ! -f $POLLER_RB ] ; then
|
15
|
+
echo "Could not find the poller file at: $POLLER_RB"
|
16
|
+
exit 1
|
17
|
+
fi
|
18
|
+
|
19
|
+
function start() {
|
20
|
+
if [[ -s $PID_FILE && -n "$(ps -A | grep "^[ \t]*$(< $PID_FILE)")" ]] ; then
|
21
|
+
PID=$(< $PID_FILE)
|
22
|
+
echo "Poller already running with pid $PID."
|
23
|
+
exit 1
|
24
|
+
fi
|
25
|
+
$JRUBY_CMD $POLLER_RB "$@" >> $OUT 2>&1 &
|
26
|
+
PID=$!
|
27
|
+
echo $PID > $PID_FILE
|
28
|
+
echo "Poller started with pid=$PID"
|
29
|
+
}
|
30
|
+
|
31
|
+
function stop() {
|
32
|
+
if [[ -z "$(ps -A | grep "^[ \t]*$(< $PID_FILE)")" ]] ; then
|
33
|
+
echo "Poller is not currently running."
|
34
|
+
exit 1
|
35
|
+
fi
|
36
|
+
if [ -z "$FORCE" ] ; then
|
37
|
+
echo "Sending TERM signal to poller."
|
38
|
+
kill -TERM $(< $PID_FILE)
|
39
|
+
else
|
40
|
+
echo "Sending KILL signal to poller."
|
41
|
+
kill -KILL $(< $PID_FILE)
|
42
|
+
fi
|
43
|
+
rm $PID_FILE
|
44
|
+
}
|
45
|
+
|
46
|
+
function restart() {
|
47
|
+
stop
|
48
|
+
start
|
49
|
+
}
|
50
|
+
|
51
|
+
function run() {
|
52
|
+
exec $JRUBY_CMD $POLLER_RB "$@"
|
53
|
+
}
|
54
|
+
|
55
|
+
function zap() {
|
56
|
+
echo "Resetting to stopped state."
|
57
|
+
[ -f $PID_FILE ] && rm $PID_FILE
|
58
|
+
}
|
59
|
+
|
60
|
+
function usage() {
|
61
|
+
cat <<EOF
|
62
|
+
Usage: poller <command> <options> -- <application options>
|
63
|
+
|
64
|
+
* where <command> is one of:
|
65
|
+
start start an instance of the application
|
66
|
+
stop stop all instances of the application
|
67
|
+
restart stop all instances and restart them afterwards
|
68
|
+
run start the application and stay on top
|
69
|
+
zap set the application to a stopped state
|
70
|
+
|
71
|
+
* and where <options> may contain several of the following:
|
72
|
+
|
73
|
+
-t, --ontop Stay on top (does not daemonize)
|
74
|
+
-f, --force Force operation
|
75
|
+
EOF
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
CMD=$1
|
80
|
+
shift
|
81
|
+
|
82
|
+
for i in "1" "2" ; do
|
83
|
+
case "$1" in
|
84
|
+
"-f"|"--force")
|
85
|
+
FORCE="true"
|
86
|
+
shift
|
87
|
+
;;
|
88
|
+
"-t"|"--ontop")
|
89
|
+
ONTOP="true"
|
90
|
+
shift
|
91
|
+
;;
|
92
|
+
esac
|
93
|
+
done
|
94
|
+
|
95
|
+
[ "$1" == "--" ] && shift
|
96
|
+
|
97
|
+
case "$CMD" in
|
98
|
+
"start")
|
99
|
+
start
|
100
|
+
;;
|
101
|
+
"stop")
|
102
|
+
stop
|
103
|
+
;;
|
104
|
+
"run")
|
105
|
+
run
|
106
|
+
;;
|
107
|
+
"restart")
|
108
|
+
restart
|
109
|
+
;;
|
110
|
+
"zap")
|
111
|
+
zap
|
112
|
+
;;
|
113
|
+
"usage"|*)
|
114
|
+
usage
|
115
|
+
exit 1
|
116
|
+
;;
|
117
|
+
esac
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#
|
2
|
+
# Add your destination definitions here
|
3
|
+
# can also be used to configure filters, and processor groups
|
4
|
+
#
|
5
|
+
ActiveMessaging::Gateway.define do |s|
|
6
|
+
#s.destination :orders, '/queue/Orders'
|
7
|
+
#s.filter :some_filter, :only=>:orders
|
8
|
+
#s.processor_group :group1, :order_processor
|
9
|
+
|
10
|
+
s.destination :<%= singular_name %>, '/queue/<%= class_name %>'
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
ENV['APP_ROOT'] ||= File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
APP_ROOT = ENV['APP_ROOT']
|
5
|
+
ENV['APP_NAME'] ||= "poller"
|
6
|
+
APP_NAME = ENV['APP_NAME']
|
7
|
+
script_file = File.join(APP_ROOT, 'lib', 'poller.rb')
|
8
|
+
tmp_dir = File.join(APP_ROOT, 'tmp')
|
9
|
+
|
10
|
+
require 'rubygems'
|
11
|
+
require 'daemons'
|
12
|
+
|
13
|
+
options = {
|
14
|
+
:app_name => APP_NAME,
|
15
|
+
:dir_mode => :normal,
|
16
|
+
:dir => tmp_dir,
|
17
|
+
:multiple => true,
|
18
|
+
:ontop => false,
|
19
|
+
:mode => :load,
|
20
|
+
:backtrace => true,
|
21
|
+
:monitor => true,
|
22
|
+
:log_output => true
|
23
|
+
}
|
24
|
+
|
25
|
+
Daemons.run(script_file,options)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Make sure stdout and stderr write out without delay for using with daemon like scripts
|
3
|
+
STDOUT.sync = true; STDOUT.flush
|
4
|
+
STDERR.sync = true; STDERR.flush
|
5
|
+
|
6
|
+
# The daemons gem sets our cwd to /, which Rails doesn't work well with.
|
7
|
+
Dir.chdir APP_ROOT
|
8
|
+
|
9
|
+
#Try to Load Merb
|
10
|
+
merb_init_file = File.expand_path(File.dirname(__FILE__)+'/../config/merb_init')
|
11
|
+
if File.exists? merb_init_file
|
12
|
+
require File.expand_path(File.dirname(__FILE__)+'/../config/boot')
|
13
|
+
#need this because of the CWD
|
14
|
+
Merb.root = MERB_ROOT
|
15
|
+
require merb_init_file
|
16
|
+
else
|
17
|
+
# Load Rails
|
18
|
+
RAILS_ROOT=File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
19
|
+
require File.join(RAILS_ROOT, 'config', 'boot')
|
20
|
+
require File.join(RAILS_ROOT, 'config', 'environment')
|
21
|
+
end
|
22
|
+
|
23
|
+
# Start it up!
|
24
|
+
require 'activemessaging'
|
25
|
+
ActiveMessaging.load_activemessaging
|
26
|
+
ActiveMessaging.start
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require 'activemessaging/test_helper'
|
3
|
+
require File.dirname(__FILE__) + '/../../app/processors/application'
|
4
|
+
|
5
|
+
class <%= class_name %>ProcessorTest < Test::Unit::TestCase
|
6
|
+
include ActiveMessaging::TestHelper
|
7
|
+
|
8
|
+
def setup
|
9
|
+
load File.dirname(__FILE__) + "/../../app/processors/<%= file_name %>_processor.rb"
|
10
|
+
@processor = <%= class_name %>Processor.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@processor = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_<%= file_name %>_processor
|
18
|
+
@processor.on_message('Your test message here!')
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class <%= class_name %>Controller < ApplicationController
|
2
|
+
include ActiveMessaging::MessageSender
|
3
|
+
|
4
|
+
publishes_to :trace
|
5
|
+
|
6
|
+
def index
|
7
|
+
end
|
8
|
+
|
9
|
+
def clear
|
10
|
+
publish :trace, "<trace-control>clear</trace-control>"
|
11
|
+
redirect_to :action=>'index'
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
4
|
+
<title>Tracer</title>
|
5
|
+
<%=javascript_include_tag :defaults %>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<h2>Tracer</h2>
|
9
|
+
|
10
|
+
<% if @flash[:note] -%>
|
11
|
+
<div id="flash"><%= @flash[:note] %></div>
|
12
|
+
<% end -%>
|
13
|
+
|
14
|
+
<%= @content_for_layout %>
|
15
|
+
</body>
|
16
|
+
</html>
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'mpath'
|
2
|
+
require 'active_support'
|
3
|
+
|
4
|
+
class Dot
|
5
|
+
|
6
|
+
attr_accessor :name, :nodes, :edges, :clean_names
|
7
|
+
|
8
|
+
def initialize name
|
9
|
+
@name = name
|
10
|
+
@nodes = {}
|
11
|
+
@clean_names = {}
|
12
|
+
@edges = []
|
13
|
+
yield self
|
14
|
+
end
|
15
|
+
|
16
|
+
def node name, params = {}
|
17
|
+
@nodes[clean_name(name)] = params.stringify_keys.reverse_merge "label"=>name
|
18
|
+
end
|
19
|
+
|
20
|
+
def clean_name name
|
21
|
+
@clean_names[name] = "node#{@clean_names.length+1}" if @clean_names[name].nil?
|
22
|
+
@clean_names[name]
|
23
|
+
end
|
24
|
+
|
25
|
+
def edge from, to
|
26
|
+
edge = [clean_name(from), clean_name(to)]
|
27
|
+
@edges << edge unless @edges.member? edge
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_s
|
31
|
+
dot = "digraph #{@name} {\n"
|
32
|
+
@nodes.each do |node_name, options|
|
33
|
+
dot += "\t#{node_name.to_s}"
|
34
|
+
optionstrings = []
|
35
|
+
options.keys.sort.each do |key|
|
36
|
+
optionstrings << "#{key}=\"#{options[key]}\""
|
37
|
+
end
|
38
|
+
dot += " [#{optionstrings.join(', ')}]" if optionstrings.length>0
|
39
|
+
dot += ";\n"
|
40
|
+
end
|
41
|
+
@edges.each {|e| dot += "\t#{e[0].to_s}->#{e[1].to_s};\n"}
|
42
|
+
dot += "}\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
def == other
|
46
|
+
(other.name == name) && (other.nodes == nodes) && (other.edges == edges) && (other.clean_names == clean_names)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class TraceProcessor < ActiveMessaging::Processor
|
51
|
+
subscribes_to :trace
|
52
|
+
|
53
|
+
@@dot = Dot.new("Trace") {}
|
54
|
+
|
55
|
+
class << self
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def dot
|
60
|
+
@@dot
|
61
|
+
end
|
62
|
+
|
63
|
+
def on_message(message)
|
64
|
+
xml = Mpath.parse(message)
|
65
|
+
if (xml.sent?) then
|
66
|
+
from = xml.sent.from.to_s
|
67
|
+
queue = xml.sent.queue.to_s
|
68
|
+
|
69
|
+
@@dot.node from
|
70
|
+
@@dot.node queue, "shape" => 'box'
|
71
|
+
@@dot.edge from, queue #hah - could do from => to
|
72
|
+
elsif (xml.received?) then
|
73
|
+
by = xml.received.by.to_s
|
74
|
+
queue = xml.received.queue.to_s
|
75
|
+
|
76
|
+
@@dot.node queue, "shape" => 'box'
|
77
|
+
@@dot.node by
|
78
|
+
@@dot.edge queue, by
|
79
|
+
elsif (xml.trace_control) then
|
80
|
+
command = xml.trace_control.to_s
|
81
|
+
begin
|
82
|
+
send command
|
83
|
+
rescue
|
84
|
+
puts "TraceProcessor: I don't understand the command #{command}"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
create_image
|
88
|
+
end
|
89
|
+
|
90
|
+
def create_image
|
91
|
+
File.open(DOT_FILE, "w") {|f| f.puts @@dot.to_s }
|
92
|
+
output_file = APP_ROOT + "/public/trace.png"
|
93
|
+
`dot -Tpng -o #{output_file} #{DOT_FILE}`
|
94
|
+
end
|
95
|
+
|
96
|
+
def clear
|
97
|
+
@@dot = Dot.new("Trace") {}
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class TracerGenerator < RubiGen::Base
|
2
|
+
def manifest
|
3
|
+
record do |m|
|
4
|
+
path = 'app/controllers'
|
5
|
+
m.directory path
|
6
|
+
m.template 'controller.rb', File.join(path, "#{file_name}_controller.rb")
|
7
|
+
|
8
|
+
path = 'app/processors'
|
9
|
+
m.directory path
|
10
|
+
m.template 'trace_processor.rb', File.join(path, "#{file_name}_processor.rb")
|
11
|
+
|
12
|
+
path = 'app/helpers'
|
13
|
+
m.directory path
|
14
|
+
m.template 'helper.rb', File.join(path, "#{file_name}_helper.rb")
|
15
|
+
|
16
|
+
path = 'app/views/layouts'
|
17
|
+
m.directory path
|
18
|
+
m.file 'layout.rhtml', File.join(path, "#{file_name}.rhtml")
|
19
|
+
|
20
|
+
path = "app/views/#{file_name}"
|
21
|
+
m.directory path
|
22
|
+
m.file 'index.rhtml', File.join(path, "index.rhtml")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'activemessaging'
|
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'active_support/all'
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
if defined?(Rails::Railtie)
|
6
|
+
require 'activemessaging/railtie.rb'
|
7
|
+
end
|
8
|
+
|
9
|
+
module ActiveMessaging
|
10
|
+
|
11
|
+
ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
12
|
+
|
13
|
+
# Used to indicate that the processing for a thread shoud complete
|
14
|
+
class StopProcessingException < Interrupt #:nodoc:
|
15
|
+
end
|
16
|
+
|
17
|
+
# Used to indicate that the processing on a message should cease,
|
18
|
+
# and the message should be returned back to the broker as best it can be
|
19
|
+
class AbortMessageException < Exception #:nodoc:
|
20
|
+
end
|
21
|
+
|
22
|
+
# Used to indicate that the processing on a message should cease,
|
23
|
+
# but no further action is required
|
24
|
+
class StopFilterException < Exception #:nodoc:
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.logger
|
28
|
+
@@logger = nil unless defined? @@logger
|
29
|
+
@@logger ||= Rails.logger if defined? Rails
|
30
|
+
@@logger ||= Logger.new(STDOUT)
|
31
|
+
@@logger
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.logger=(logger)
|
35
|
+
@@logger = logger
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.app_root
|
39
|
+
@@app_root ||= (ENV['APP_ROOT'] || (defined?(::Rails) && ::Rails.root) || ENV['RAILS_ROOT'] || File.expand_path(Dir.pwd))
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.app_env
|
43
|
+
@@app_env ||= (ENV['APP_ENV'] || (defined?(::Rails) && ::Rails.env) || ENV['RAILS_ENV'] || 'development')
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.load_extensions
|
47
|
+
require 'logger'
|
48
|
+
require 'activemessaging/gateway'
|
49
|
+
require 'activemessaging/adapter'
|
50
|
+
require 'activemessaging/message_sender'
|
51
|
+
require 'activemessaging/processor'
|
52
|
+
require 'activemessaging/filter'
|
53
|
+
require 'activemessaging/trace_filter'
|
54
|
+
|
55
|
+
# load all under the adapters dir
|
56
|
+
Dir[File.join(ROOT, 'lib', 'activemessaging', 'adapters', '*.rb')].each do |a|
|
57
|
+
begin
|
58
|
+
adapter_name = File.basename(a, ".rb")
|
59
|
+
require 'activemessaging/adapters/' + adapter_name
|
60
|
+
rescue RuntimeError, LoadError => e
|
61
|
+
logger.warn "ActiveMessaging: adapter #{adapter_name} not loaded: #{ e.message }"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.load_config
|
67
|
+
# Skip loading config if there are no custom processors as the generator
|
68
|
+
# is likely running since application_processor.rb and another processor
|
69
|
+
# should exist when running rails.
|
70
|
+
if Dir["#{app_root}/app/processors/*.rb"].size() <= 1
|
71
|
+
return
|
72
|
+
end
|
73
|
+
path = File.expand_path("#{app_root}/config/messaging.rb")
|
74
|
+
begin
|
75
|
+
load path
|
76
|
+
rescue
|
77
|
+
raise $!, " ActiveMessaging: problems trying to load '#{path}': \n\t#{$!.message}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.load_processors(first=true)
|
82
|
+
logger.info "ActiveMessaging: Loading #{app_root}/app/processors/application_processor.rb" if first
|
83
|
+
load "#{app_root}/app/processors/application_processor.rb" if File.exist?("#{app_root}/app/processors/application_processor.rb")
|
84
|
+
Dir["#{app_root}/app/processors/*.rb"].each do |f|
|
85
|
+
unless f.match(/\/application_processor.rb/)
|
86
|
+
logger.info "ActiveMessaging: Loading #{f}" if first
|
87
|
+
load f
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.reload_activemessaging
|
93
|
+
# this is resetting the messaging.rb
|
94
|
+
ActiveMessaging::Gateway.filters = []
|
95
|
+
ActiveMessaging::Gateway.named_destinations = {}
|
96
|
+
ActiveMessaging::Gateway.processor_groups = {}
|
97
|
+
|
98
|
+
# now load the config
|
99
|
+
load_config
|
100
|
+
load_processors(false)
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.load_activemessaging
|
104
|
+
load_extensions
|
105
|
+
load_config
|
106
|
+
load_processors
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.start
|
110
|
+
if ActiveMessaging::Gateway.subscriptions.empty?
|
111
|
+
err_msg = <<-EOM
|
112
|
+
|
113
|
+
ActiveMessaging Error: No subscriptions.
|
114
|
+
|
115
|
+
If you have no processor classes in app/processors, add them using the command:
|
116
|
+
script/generate processor DoSomething"
|
117
|
+
|
118
|
+
If you have processor classes, make sure they include in the class a call to 'subscribes_to':
|
119
|
+
class DoSomethingProcessor < ActiveMessaging::Processor
|
120
|
+
subscribes_to :do_something
|
121
|
+
# ...
|
122
|
+
end
|
123
|
+
|
124
|
+
EOM
|
125
|
+
puts err_msg
|
126
|
+
logger.error err_msg
|
127
|
+
exit
|
128
|
+
end
|
129
|
+
|
130
|
+
Gateway.start
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|