modern_times 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +24 -12
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/examples/README +4 -0
- data/examples/jms.yml +9 -0
- data/examples/requestor/README +4 -2
- data/examples/requestor/manager.rb +3 -2
- data/examples/requestor/request.rb +5 -4
- data/examples/requestor/reverse_echo_worker.rb +3 -2
- data/examples/simple/README +7 -4
- data/examples/simple/bar_worker.rb +4 -1
- data/examples/simple/baz_worker.rb +4 -3
- data/examples/simple/manager.rb +3 -2
- data/examples/simple/publish.rb +6 -5
- data/lib/modern_times.rb +20 -2
- data/lib/modern_times/base/supervisor.rb +14 -21
- data/lib/modern_times/base/supervisor_mbean.rb +4 -6
- data/lib/modern_times/base/worker.rb +17 -26
- data/lib/modern_times/jms.rb +23 -0
- data/lib/modern_times/{hornetq/client.rb → jms/connection.rb} +19 -12
- data/lib/modern_times/jms/publisher.rb +91 -0
- data/lib/modern_times/jms/supervisor.rb +19 -0
- data/lib/modern_times/jms/supervisor_mbean.rb +11 -0
- data/lib/modern_times/jms/worker.rb +166 -0
- data/lib/modern_times/jms_requestor.rb +10 -0
- data/lib/modern_times/jms_requestor/request_handle.rb +33 -0
- data/lib/modern_times/jms_requestor/requestor.rb +45 -0
- data/lib/modern_times/jms_requestor/supervisor.rb +45 -0
- data/lib/modern_times/jms_requestor/supervisor_mbean.rb +21 -0
- data/lib/modern_times/jms_requestor/worker.rb +78 -0
- data/lib/modern_times/manager.rb +14 -9
- data/lib/modern_times/manager_mbean.rb +14 -7
- data/lib/modern_times/marshal_strategy.rb +47 -0
- data/lib/modern_times/marshal_strategy/bson.rb +31 -0
- data/lib/modern_times/marshal_strategy/json.rb +30 -0
- data/lib/modern_times/marshal_strategy/ruby.rb +20 -0
- data/lib/modern_times/marshal_strategy/string.rb +19 -0
- data/lib/modern_times/railsable.rb +17 -74
- data/test/base_test.rb +248 -0
- data/test/jms.yml +8 -0
- data/test/jms_requestor_test.rb +263 -0
- data/test/jms_test.rb +296 -0
- data/test/marshal_strategy_test.rb +39 -0
- metadata +49 -46
- data/examples/requestor/hornetq.yml +0 -14
- data/examples/simple/hornetq.yml +0 -14
- data/lib/modern_times/hornetq.rb +0 -11
- data/lib/modern_times/hornetq/marshal_strategy.rb +0 -3
- data/lib/modern_times/hornetq/marshal_strategy/json.rb +0 -17
- data/lib/modern_times/hornetq/marshal_strategy/ruby.rb +0 -17
- data/lib/modern_times/hornetq/marshal_strategy/string.rb +0 -17
- data/lib/modern_times/hornetq/publisher.rb +0 -65
- data/lib/modern_times/hornetq/supervisor.rb +0 -22
- data/lib/modern_times/hornetq/supervisor_mbean.rb +0 -12
- data/lib/modern_times/hornetq/worker.rb +0 -127
- data/lib/modern_times/hornetq_requestor.rb +0 -9
- data/lib/modern_times/hornetq_requestor/request_handle.rb +0 -49
- data/lib/modern_times/hornetq_requestor/requestor.rb +0 -48
- data/lib/modern_times/hornetq_requestor/worker.rb +0 -29
- data/lib/modern_times/thread.rb +0 -16
- data/test/base/worker_test.rb +0 -38
- data/test/messaging/worker_manager_test.rb +0 -58
- data/test/messaging/worker_test.rb +0 -58
- data/test/worker_manager_test.rb +0 -48
@@ -1,29 +0,0 @@
|
|
1
|
-
module ModernTimes
|
2
|
-
module HornetQRequestor
|
3
|
-
|
4
|
-
# Base Worker Class for any class that will be processing messages from queues
|
5
|
-
class Worker < ModernTimes::HornetQ::Worker
|
6
|
-
# Make HornetQRequestor::Supervisor our supervisor
|
7
|
-
#supervisor Supervisor
|
8
|
-
|
9
|
-
def on_message(message)
|
10
|
-
@reply_queue = message.get_string_property(Java::OrgHornetqCoreClientImpl::ClientMessageImpl::REPLYTO_HEADER_NAME)
|
11
|
-
@message_id = message.get_string_property(MESSAGE_ID)
|
12
|
-
super
|
13
|
-
end
|
14
|
-
|
15
|
-
def perform(object)
|
16
|
-
response = request(object)
|
17
|
-
session.producer(@reply_queue) do |producer|
|
18
|
-
reply_message = marshal(session, response, false)
|
19
|
-
reply_message.put_string_property(MESSAGE_ID, @message_id)
|
20
|
-
producer.send_with_retry(reply_message)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def request(object)
|
25
|
-
raise "#{self}: Need to override request method in #{self.class.name} in order to act on #{object}"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
data/lib/modern_times/thread.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
module ModernTimes
|
2
|
-
class Thread < ::Thread
|
3
|
-
def initialize(&block)
|
4
|
-
super() do
|
5
|
-
begin
|
6
|
-
yield
|
7
|
-
rescue => e
|
8
|
-
ModernTimes.logger.fatal("Thread #{self} died due to exception #{e.message}\n#{e.backtrace.join("\n")}")
|
9
|
-
ensure
|
10
|
-
ActiveRecord::Base.clear_active_connections!() if Module.const_get('ActiveRecord') rescue nil
|
11
|
-
ModernTimes.logger.flush if ModernTimes.logger.respond_to?(:flush)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/test/base/worker_test.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'modern_times'
|
2
|
-
require 'shoulda'
|
3
|
-
require 'test/unit'
|
4
|
-
|
5
|
-
class DummyWorker < ModernTimes::Base::Worker
|
6
|
-
end
|
7
|
-
|
8
|
-
module Base
|
9
|
-
class WorkerTest < Test::Unit::TestCase
|
10
|
-
|
11
|
-
context 'a worker with no name specified' do
|
12
|
-
setup do
|
13
|
-
@worker = DummyWorker.new
|
14
|
-
@worker.index = 2
|
15
|
-
@worker.thread = 'dummy thread'
|
16
|
-
@supervisor = DummyWorker.create_supervisor('dummy_manager')
|
17
|
-
end
|
18
|
-
|
19
|
-
should "have default name and proper supervisor and attributes" do
|
20
|
-
assert_equal('Dummy', @worker.name)
|
21
|
-
assert_equal(2, @worker.index)
|
22
|
-
assert_equal('dummy thread', @worker.thread)
|
23
|
-
assert_equal(ModernTimes::Base::Supervisor, @supervisor.class)
|
24
|
-
assert_equal('dummy_manager', @supervisor.manager)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context 'a worker with name specified' do
|
29
|
-
setup do
|
30
|
-
@worker = DummyWorker.new(:name => 'Foo')
|
31
|
-
end
|
32
|
-
|
33
|
-
should "have name specified and proper supervisor and attributes" do
|
34
|
-
assert_equal('Foo', @worker.name)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class DummyDefaultWorker < Messaging::Worker
|
4
|
-
end
|
5
|
-
|
6
|
-
module Dummy
|
7
|
-
class DefaultWorker < Messaging::Worker
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
class DummyDefaultWorkerWithSpecifiedNames < Messaging::Worker
|
12
|
-
address :MyAddressName
|
13
|
-
queue :MyQueueName
|
14
|
-
end
|
15
|
-
|
16
|
-
module Messaging
|
17
|
-
class WorkerManagerTest < ActiveSupport::TestCase
|
18
|
-
|
19
|
-
context 'a default worker' do
|
20
|
-
setup do
|
21
|
-
@worker = DummyDefaultWorker.new
|
22
|
-
@worker.message = 'foo'
|
23
|
-
@worker.session = 'dummy session'
|
24
|
-
@worker.thread_number = 4
|
25
|
-
end
|
26
|
-
|
27
|
-
should "have address and queue names derived from it's class name" do
|
28
|
-
assert_equal(@worker.address_name, 'DummyDefault')
|
29
|
-
assert_equal(@worker.queue_name, 'DummyDefault')
|
30
|
-
assert_equal(@worker.message, 'foo')
|
31
|
-
assert_equal(@worker.session, 'dummy session')
|
32
|
-
assert_equal(@worker.thread_number, 4)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context 'a default worker in a namespace' do
|
37
|
-
setup do
|
38
|
-
@worker = Dummy::DefaultWorker.new
|
39
|
-
end
|
40
|
-
|
41
|
-
should "have address and queue names derived from it's class name" do
|
42
|
-
assert_equal(@worker.address_name, 'Dummy_Default')
|
43
|
-
assert_equal(@worker.queue_name, 'Dummy_Default')
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'a worker with specified names' do
|
48
|
-
setup do
|
49
|
-
@worker = DummyDefaultWorkerWithSpecifiedNames.new
|
50
|
-
end
|
51
|
-
|
52
|
-
should "have address and queue names matching the specified names" do
|
53
|
-
assert_equal(@worker.address_name, 'MyAddressName')
|
54
|
-
assert_equal(@worker.queue_name, 'MyQueueName')
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class DummyDefaultWorker < Messaging::Worker
|
4
|
-
end
|
5
|
-
|
6
|
-
module Dummy
|
7
|
-
class DefaultWorker < Messaging::Worker
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
class DummyDefaultWorkerWithSpecifiedNames < Messaging::Worker
|
12
|
-
address :MyAddressName
|
13
|
-
queue :MyQueueName
|
14
|
-
end
|
15
|
-
|
16
|
-
module Messaging
|
17
|
-
class WorkerTest < ActiveSupport::TestCase
|
18
|
-
|
19
|
-
context 'a default worker' do
|
20
|
-
setup do
|
21
|
-
@worker = DummyDefaultWorker.new
|
22
|
-
@worker.message = 'foo'
|
23
|
-
@worker.session = 'dummy session'
|
24
|
-
@worker.thread_number = 4
|
25
|
-
end
|
26
|
-
|
27
|
-
should "have address and queue names derived from it's class name" do
|
28
|
-
assert_equal(@worker.address_name, 'DummyDefault')
|
29
|
-
assert_equal(@worker.queue_name, 'DummyDefault')
|
30
|
-
assert_equal(@worker.message, 'foo')
|
31
|
-
assert_equal(@worker.session, 'dummy session')
|
32
|
-
assert_equal(@worker.thread_number, 4)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context 'a default worker in a namespace' do
|
37
|
-
setup do
|
38
|
-
@worker = Dummy::DefaultWorker.new
|
39
|
-
end
|
40
|
-
|
41
|
-
should "have address and queue names derived from it's class name" do
|
42
|
-
assert_equal(@worker.address_name, 'Dummy_Default')
|
43
|
-
assert_equal(@worker.queue_name, 'Dummy_Default')
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'a worker with specified names' do
|
48
|
-
setup do
|
49
|
-
@worker = DummyDefaultWorkerWithSpecifiedNames.new
|
50
|
-
end
|
51
|
-
|
52
|
-
should "have address and queue names matching the specified names" do
|
53
|
-
assert_equal(@worker.address_name, 'MyAddressName')
|
54
|
-
assert_equal(@worker.queue_name, 'MyQueueName')
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
data/test/worker_manager_test.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'test/unit'
|
3
|
-
require 'shoulda'
|
4
|
-
require 'modern_times'
|
5
|
-
require 'range_queue_strategy'
|
6
|
-
require 'range_queue_worker'
|
7
|
-
|
8
|
-
class WorkerManagerTest < Test::Unit::TestCase
|
9
|
-
context 'on single strategy' do
|
10
|
-
setup do
|
11
|
-
@range = 1..100
|
12
|
-
end
|
13
|
-
|
14
|
-
should 'work' do
|
15
|
-
strategy = RangeQueueStrategy.new(@range)
|
16
|
-
manager = ModernTimes::WorkerManager.new
|
17
|
-
worker = RangeQueueWorker.new
|
18
|
-
thread_count = 10
|
19
|
-
manager.add(strategy, worker, thread_count, 1)
|
20
|
-
sleep(2)
|
21
|
-
manager.stop
|
22
|
-
assert_equal @range.to_a, worker.results.sort
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'on multiple strategies' do
|
27
|
-
setup do
|
28
|
-
@ranges = [1..100, 101..200, 201..300]
|
29
|
-
end
|
30
|
-
|
31
|
-
should 'work' do
|
32
|
-
[nil, 1].each do |poll_sleep|
|
33
|
-
strategies = @ranges.map {|range| RangeQueueStrategy.new(range) }
|
34
|
-
manager = ModernTimes::WorkerManager.new
|
35
|
-
workers = [RangeQueueWorker.new, RangeQueueWorker.new, RangeQueueWorker.new]
|
36
|
-
thread_count = 10
|
37
|
-
strategies.each_index do |i|
|
38
|
-
manager.add(strategies[i], workers[i], thread_count, poll_sleep)
|
39
|
-
end
|
40
|
-
sleep(2)
|
41
|
-
manager.stop
|
42
|
-
strategies.each_index do |i|
|
43
|
-
assert_equal @ranges[i].to_a, workers[i].results.sort
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|