modern_times 0.1.2 → 0.2.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/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
|