jruby-hornetq 0.4.0 → 0.5.0.alpha
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/Gemfile +9 -0
- data/Gemfile.lock +30 -0
- data/HISTORY.md +6 -0
- data/README.md +33 -35
- data/Rakefile +14 -9
- data/examples/advanced/batch_client.rb +8 -8
- data/examples/advanced/batch_requestor_pattern.rb +34 -34
- data/examples/advanced/bytes_producer.rb +3 -3
- data/examples/advanced/client.rb +5 -5
- data/examples/advanced/client_session_pooling.rb +3 -3
- data/examples/advanced/consume_on_message.rb +5 -5
- data/examples/advanced/consumer.rb +2 -2
- data/examples/advanced/multi_client.rb +3 -3
- data/examples/advanced/producer.rb +3 -3
- data/examples/advanced/server.rb +4 -4
- data/examples/client-server/client.rb +4 -4
- data/examples/client-server/server.rb +4 -4
- data/examples/producer-consumer/consume_all.rb +2 -2
- data/examples/producer-consumer/consume_on_message.rb +5 -5
- data/examples/producer-consumer/consumer.rb +2 -2
- data/examples/producer-consumer/producer.rb +3 -3
- data/examples/resque/hornetq_job.rb +19 -19
- data/examples/resque/processor.rb +4 -4
- data/examples/resque/sleep_job.rb +3 -3
- data/lib/hornetq.rb +3 -2
- data/lib/hornetq/client.rb +4 -2
- data/lib/hornetq/client/connection.rb +86 -86
- data/lib/hornetq/client/message_handler.rb +1 -1
- data/lib/hornetq/client/org_hornetq_api_core_client_client_session.rb +67 -67
- data/lib/hornetq/client/org_hornetq_core_client_impl_client_consumer_impl.rb +11 -11
- data/lib/hornetq/client/org_hornetq_core_client_impl_client_message_impl.rb +126 -126
- data/lib/hornetq/client/org_hornetq_core_client_impl_client_producer_impl.rb +14 -14
- data/lib/hornetq/client/org_hornetq_utils_typed_properties.rb +6 -6
- data/lib/hornetq/client/requestor_pattern.rb +24 -24
- data/lib/hornetq/client/server_pattern.rb +4 -4
- data/lib/hornetq/client/session_pool.rb +18 -18
- data/lib/hornetq/common/logging.rb +1 -14
- data/lib/hornetq/java/hornetq-bootstrap.jar +0 -0
- data/lib/hornetq/java/hornetq-commons.jar +0 -0
- data/lib/hornetq/java/hornetq-core-client.jar +0 -0
- data/lib/hornetq/java/hornetq-journal.jar +0 -0
- data/lib/hornetq/java/hornetq-server.jar +0 -0
- data/lib/hornetq/java/jnp-client.jar +0 -0
- data/lib/hornetq/java/netty.jar +0 -0
- data/lib/hornetq/server.rb +4 -1
- data/lib/hornetq/version.rb +3 -0
- data/nbproject/private/private.properties +4 -0
- data/nbproject/private/private.xml +4 -0
- data/nbproject/private/rake-d.txt +4 -0
- data/nbproject/project.properties +11 -0
- data/nbproject/project.xml +17 -0
- data/test/client_connection_test.rb +25 -25
- data/test/logging_test.rb +3 -3
- metadata +131 -125
- data/bin/data/bindings/hornetq-bindings-1.bindings +0 -0
- data/bin/data/bindings/hornetq-bindings-2.bindings +0 -0
- data/bin/data/journal/hornetq-data-1.hq +0 -0
- data/bin/data/journal/hornetq-data-2.hq +0 -0
- data/lib/hornetq/common/log_delegate.rb +0 -48
- data/lib/hornetq/common/org_hornetq_core_logging_logger.rb +0 -60
- data/lib/hornetq/java/hornetq-core.jar +0 -0
@@ -12,14 +12,14 @@ require 'hornetq'
|
|
12
12
|
HornetQ::Client::Connection.session('hornetq://localhost') do |session|
|
13
13
|
# Create the non-durable TestQueue to receive messages sent to the TestAddress
|
14
14
|
session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
|
15
|
-
|
15
|
+
|
16
16
|
# Create Producer so that we can send messages to the Address 'jms.queue.ExampleQueue'
|
17
17
|
session.producer('TestAddress') do |producer|
|
18
|
-
|
18
|
+
|
19
19
|
# Create a non-durable bytes message to send
|
20
20
|
message = session.create_message(HornetQ::Client::Message::BYTES_TYPE,false)
|
21
21
|
message.body = "#{Time.now}: ### Hello, World ###"
|
22
|
-
|
22
|
+
|
23
23
|
producer.send(message)
|
24
24
|
end
|
25
25
|
end
|
data/examples/advanced/client.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
# HornetQ Requestor:
|
3
3
|
# Submit a request and wait for a reply
|
4
4
|
# Uses the Requestor Pattern
|
5
|
-
#
|
6
|
-
# The Server (server.rb) must be running first, otherwise this example
|
5
|
+
#
|
6
|
+
# The Server (server.rb) must be running first, otherwise this example
|
7
7
|
# program will eventually timeout
|
8
8
|
# Displays a '.' for every request completed
|
9
9
|
# Used for performance measurements
|
@@ -26,7 +26,7 @@ HornetQ::Client::Connection.start_session(config) do |session|
|
|
26
26
|
# Create a non-durable ServerQueue to receive messages sent to the ServerAddress
|
27
27
|
session.create_queue_ignore_exists('ServerAddress', 'ServerQueue', false)
|
28
28
|
start_time = Time.now
|
29
|
-
|
29
|
+
|
30
30
|
# Use Requestor (Client) Pattern to do a "RPC like" call to a server
|
31
31
|
# Under the covers the requestor creates a temporary dynamic reply to queue
|
32
32
|
# for the server to send the reply message to
|
@@ -38,7 +38,7 @@ HornetQ::Client::Connection.start_session(config) do |session|
|
|
38
38
|
message.body = "Some request data"
|
39
39
|
# Set the user managed message id
|
40
40
|
message.user_id = Java::org.hornetq.utils::UUIDGenerator.getInstance.generateUUID
|
41
|
-
|
41
|
+
|
42
42
|
if reply = requestor.request(message, timeout)
|
43
43
|
puts "Received Response: #{reply.inspect}" if count < 10
|
44
44
|
puts " Message:[#{reply.body.inspect}]" if count < 10
|
@@ -47,7 +47,7 @@ HornetQ::Client::Connection.start_session(config) do |session|
|
|
47
47
|
puts "Time out, No reply received after #{timeout/1000} seconds"
|
48
48
|
end
|
49
49
|
puts "#{i}" if i%1000 == 0
|
50
|
-
|
50
|
+
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
#
|
2
2
|
# HornetQ Requestor using session_pooling:
|
3
|
-
# Multithreaded clients all doing requests.
|
4
|
-
#
|
3
|
+
# Multithreaded clients all doing requests.
|
4
|
+
#
|
5
5
|
# Shows how the same session can be used safely on different threads
|
6
6
|
# rather than each thread having to create its own session
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# Typical scenario is in a Rails app when we need to do a call to a
|
9
9
|
# remote server and block until a response is received
|
10
10
|
#
|
@@ -20,12 +20,12 @@ config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
|
|
20
20
|
|
21
21
|
# Using Connect.start since a session must be started in order to consume messages
|
22
22
|
HornetQ::Client::Connection.connection(config[:connection]) do |connection|
|
23
|
-
|
23
|
+
|
24
24
|
# Create a non-durable TestQueue to receive messages sent to the TestAddress
|
25
25
|
connection.session(config[:session]) do |session|
|
26
26
|
session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
# Consume All messages from the queue and gather statistics
|
30
30
|
# on_message will call the supplied block for every message received in another
|
31
31
|
# thread. As a result, the on_message call returns immediately!
|
@@ -33,17 +33,17 @@ HornetQ::Client::Connection.connection(config[:connection]) do |connection|
|
|
33
33
|
#
|
34
34
|
# :session_count can be used to spawn multiple consumers simultaneously, each
|
35
35
|
# receiving messages simultaneously on their own threads
|
36
|
-
connection.on_message(:queue_name => 'TestQueue',
|
36
|
+
connection.on_message(:queue_name => 'TestQueue',
|
37
37
|
:session_count => session_count,
|
38
38
|
:statistics => true) do |message|
|
39
39
|
print '.'
|
40
40
|
message.acknowledge
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
puts "Started #{session_count} consumers, will wait for #{sleep_time/1000} seconds before shutting down"
|
44
44
|
# Wait for sleep_time before shutting down the server
|
45
45
|
sleep(sleep_time/1000)
|
46
|
-
|
46
|
+
|
47
47
|
connection.on_message_statistics.each do |stats|
|
48
48
|
puts "Received #{stats[:count]} messages in #{stats[:duration]} seconds at #{stats[:messages_per_second]} messages per second"
|
49
49
|
end
|
@@ -18,10 +18,10 @@ config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
|
|
18
18
|
|
19
19
|
# Create a HornetQ session
|
20
20
|
HornetQ::Client::Connection.start_session(config) do |session|
|
21
|
-
|
21
|
+
|
22
22
|
# Create the non-durable TestQueue to receive messages sent to the TestAddress
|
23
23
|
session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
|
24
|
-
|
24
|
+
|
25
25
|
# Consume All messages from the queue
|
26
26
|
stats = session.consume(:queue_name => 'TestQueue', :timeout=> 0, :statistics=>true) do |message|
|
27
27
|
print '.'
|
@@ -21,7 +21,7 @@ def worker_thread(id, connection, timeout, request_count)
|
|
21
21
|
begin
|
22
22
|
connection.start_session do |session|
|
23
23
|
start_time = Time.now
|
24
|
-
|
24
|
+
|
25
25
|
# Use Requestor (Client) Pattern to do a "RPC like" call to a server
|
26
26
|
# Under the covers the requestor creates a temporary dynamic reply to queue
|
27
27
|
# for the server to send the reply message to
|
@@ -33,7 +33,7 @@ def worker_thread(id, connection, timeout, request_count)
|
|
33
33
|
message.body = "Some request data"
|
34
34
|
# Set the user managed message id
|
35
35
|
message.user_id = Java::org.hornetq.utils::UUIDGenerator.getInstance.generateUUID
|
36
|
-
|
36
|
+
|
37
37
|
if reply = requestor.request(message, timeout)
|
38
38
|
puts "Thread[#{id}]:Received Response: #{reply.inspect}" if request_count < 10
|
39
39
|
puts "Thread[#{id}]: Message:[#{reply.body.inspect}]" if request_count < 10
|
@@ -44,7 +44,7 @@ def worker_thread(id, connection, timeout, request_count)
|
|
44
44
|
puts "Thread:#{id}=>#{i}" if i%1000 == 0
|
45
45
|
end
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
duration = Time.now - start_time
|
49
49
|
puts "\nThread[#{id}]:Made #{request_count} calls in #{duration} seconds at #{request_count/duration} synchronous requests per second"
|
50
50
|
end
|
@@ -20,7 +20,7 @@ HornetQ::Client::Connection.session(config) do |session|
|
|
20
20
|
# Create a non-durable TestQueue to receive messages sent to the TestAddress
|
21
21
|
session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
|
22
22
|
start_time = Time.now
|
23
|
-
|
23
|
+
|
24
24
|
session.producer('TestAddress') do |producer|
|
25
25
|
puts "Sending messages"
|
26
26
|
(1..count).each do |i|
|
@@ -28,12 +28,12 @@ HornetQ::Client::Connection.session(config) do |session|
|
|
28
28
|
message.body = "#{Time.now}: ### Hello, World ###"
|
29
29
|
message.body = "#{Time.now}: #{i} : ### Hello, World ###"
|
30
30
|
message.user_id = Java::org.hornetq.utils::UUIDGenerator.getInstance.generateUUID
|
31
|
-
|
31
|
+
|
32
32
|
producer.send(message)
|
33
33
|
puts "#{i}\n" if i%1000 == 0
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
duration = Time.now - start_time
|
38
38
|
puts "Delivered #{count} messages in #{duration} seconds at #{count/duration} messages per second"
|
39
39
|
end
|
data/examples/advanced/server.rb
CHANGED
@@ -21,24 +21,24 @@ HornetQ::Client::Connection.start_session(config) do |session|
|
|
21
21
|
|
22
22
|
count = 0
|
23
23
|
start_time = Time.now
|
24
|
-
|
24
|
+
|
25
25
|
session.server('ServerQueue', timeout) do |server|
|
26
26
|
puts "Server started and waiting for requests ..."
|
27
27
|
server.run do |request_message|
|
28
28
|
count += 1
|
29
29
|
print '.'
|
30
30
|
puts "#{count}" if count%1000 == 0
|
31
|
-
|
31
|
+
|
32
32
|
# Create Reply Message
|
33
33
|
reply_message = session.create_message(HornetQ::Client::Message::TEXT_TYPE, false)
|
34
34
|
reply_message.body = "Echo [#{request_message.body}]"
|
35
|
-
|
35
|
+
|
36
36
|
# The result of this block is the message to be sent back to the requestor (client)
|
37
37
|
# Or, nil if no response should be sent back
|
38
38
|
reply_message
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
duration = Time.now - start_time - timeout/1000
|
43
43
|
puts "\nReceived #{count} requests in #{duration} seconds at #{count/duration} messages per second"
|
44
44
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# HornetQ Requestor (Client):
|
3
3
|
# Submit a request and wait for a reply
|
4
4
|
# Uses the Requestor Pattern
|
5
|
-
# The Server (server.rb) must be running first, otherwise this example
|
5
|
+
# The Server (server.rb) must be running first, otherwise this example
|
6
6
|
# program will eventually timeout
|
7
7
|
#
|
8
8
|
|
@@ -16,7 +16,7 @@ timeout = (ARGV[0] || 5000).to_i
|
|
16
16
|
|
17
17
|
# Using Connect.start since a session must be started in order to consume messages
|
18
18
|
HornetQ::Client::Connection.start_session('hornetq://localhost') do |session|
|
19
|
-
|
19
|
+
|
20
20
|
# Create a non-durable ServerQueue to receive messages sent to the ServerAddress
|
21
21
|
session.create_queue_ignore_exists('ServerAddress', 'ServerQueue', false)
|
22
22
|
|
@@ -27,7 +27,7 @@ HornetQ::Client::Connection.start_session('hornetq://localhost') do |session|
|
|
27
27
|
# Create non-durable message
|
28
28
|
message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
|
29
29
|
message.body = "Some request data"
|
30
|
-
|
30
|
+
|
31
31
|
# Send message to the address
|
32
32
|
puts "Send request message and wait for Reply"
|
33
33
|
if reply = requestor.request(message, timeout)
|
@@ -35,6 +35,6 @@ HornetQ::Client::Connection.start_session('hornetq://localhost') do |session|
|
|
35
35
|
else
|
36
36
|
puts "Time out, No reply received after #{timeout/1000} seconds"
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
end
|
40
40
|
end
|
@@ -20,18 +20,18 @@ HornetQ::Client::Connection.start_session(:connection=> {:uri => 'hornetq://loca
|
|
20
20
|
session.create_queue_ignore_exists('ServerAddress', 'ServerQueue', false)
|
21
21
|
|
22
22
|
session.server('ServerQueue', timeout) do |server|
|
23
|
-
puts "Waiting for Requests..."
|
23
|
+
puts "Waiting for Requests..."
|
24
24
|
server.run do |request_message|
|
25
25
|
puts "Received:[#{request_message.inspect}]"
|
26
|
-
|
26
|
+
|
27
27
|
# Create Reply Message
|
28
28
|
reply_message = session.create_message(HornetQ::Client::Message::TEXT_TYPE, false)
|
29
29
|
reply_message.body = "Echo [#{request_message.body}]"
|
30
|
-
|
30
|
+
|
31
31
|
# The result of this block is the message to be sent back to the requestor (client)
|
32
32
|
# Or, nil if no response should be sent back
|
33
33
|
reply_message
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
end
|
@@ -11,10 +11,10 @@ require 'hornetq'
|
|
11
11
|
|
12
12
|
# Using Connect.start since a session must be started in order to consume messages
|
13
13
|
HornetQ::Client::Connection.start_session('hornetq://localhost') do |session|
|
14
|
-
|
14
|
+
|
15
15
|
# Create a non-durable TestQueue to receive messages sent to the TestAddress
|
16
16
|
session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
|
17
|
-
|
17
|
+
|
18
18
|
# Consume All messages from the queue and gather statistics
|
19
19
|
stats = session.consume(:queue_name => 'TestQueue', :timeout=> 0, :statistics=>true) do |message|
|
20
20
|
p message
|
@@ -15,12 +15,12 @@ session_count = (ARGV[1] || 1).to_i
|
|
15
15
|
|
16
16
|
# Using Connect.start since a session must be started in order to consume messages
|
17
17
|
HornetQ::Client::Connection.connection('hornetq://localhost') do |connection|
|
18
|
-
|
18
|
+
|
19
19
|
# Create a non-durable TestQueue to receive messages sent to the TestAddress
|
20
20
|
connection.session do |session|
|
21
21
|
session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
# Consume All messages from the queue and gather statistics
|
25
25
|
# on_message will call the supplied block for every message received in another
|
26
26
|
# thread. As a result, the on_message call returns immediately!
|
@@ -28,18 +28,18 @@ HornetQ::Client::Connection.connection('hornetq://localhost') do |connection|
|
|
28
28
|
#
|
29
29
|
# :session_count can be used to spawn multiple consumers simultaneously, each
|
30
30
|
# receiving messages simultaneously on their own threads
|
31
|
-
connection.on_message(:queue_name => 'TestQueue',
|
31
|
+
connection.on_message(:queue_name => 'TestQueue',
|
32
32
|
:session_count => session_count,
|
33
33
|
:statistics => true) do |message|
|
34
34
|
p message
|
35
35
|
puts "=================================="
|
36
36
|
message.acknowledge
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
puts "Started #{session_count} consumers, will wait for #{sleep_time/1000} seconds before shutting down"
|
40
40
|
# Wait for sleep_time before shutting down the server
|
41
41
|
sleep(sleep_time/1000)
|
42
|
-
|
42
|
+
|
43
43
|
connection.on_message_statistics.each do |stats|
|
44
44
|
puts "Received #{stats[:count]} messages in #{stats[:duration]} seconds at #{stats[:messages_per_second]} messages per second"
|
45
45
|
end
|
@@ -11,10 +11,10 @@ require 'hornetq'
|
|
11
11
|
|
12
12
|
# Using Connect.start since a session must be started in order to consume messages
|
13
13
|
HornetQ::Client::Connection.start_session('hornetq://localhost') do |session|
|
14
|
-
|
14
|
+
|
15
15
|
# Create the non-durable TestQueue to receive messages sent to the TestAddress
|
16
16
|
session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
|
17
|
-
|
17
|
+
|
18
18
|
session.consumer('TestQueue') do |consumer|
|
19
19
|
# Receive a single message, return immediately if no message available
|
20
20
|
if message = consumer.receive_immediate
|
@@ -14,7 +14,7 @@ require 'hornetq'
|
|
14
14
|
HornetQ::Client::Connection.session('hornetq://localhost') do |session|
|
15
15
|
# Create a non-durable TestQueue to receive messages sent to the TestAddress
|
16
16
|
session.create_queue_ignore_exists('TestAddress', 'TestQueue', false)
|
17
|
-
|
17
|
+
|
18
18
|
# Using the Producer pattern send messages to the Address 'TestAddress'
|
19
19
|
session.producer('TestAddress') do |producer|
|
20
20
|
# Create a non-durable message
|
@@ -24,9 +24,9 @@ HornetQ::Client::Connection.session('hornetq://localhost') do |session|
|
|
24
24
|
# Always set the message type prior to setting the body so that the message
|
25
25
|
# is correctly created for you
|
26
26
|
message.body = "#{Time.now}: ### Hello, World ###"
|
27
|
-
|
27
|
+
|
28
28
|
producer.send(message)
|
29
|
-
|
29
|
+
|
30
30
|
puts "Sent Message: #{message.inspect}"
|
31
31
|
end
|
32
32
|
end
|
@@ -13,12 +13,12 @@ require 'sync'
|
|
13
13
|
# batch files. Rather than just flood the queue with every record from a file
|
14
14
|
# the Batch Client Pattern can be used to only send out a batch of requests at
|
15
15
|
# a time and when sufficient responses have been received, send another batch.
|
16
|
-
#
|
16
|
+
#
|
17
17
|
# The following additional features can be implemented in this pattern
|
18
18
|
# * Stop the batch if say 80% of records fail in the first batch, etc.
|
19
19
|
# * Support pause and resume of batch processing
|
20
20
|
# * Support restart and recoverability
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# See the Resque example for implementations of some of the above capabilities
|
23
23
|
#
|
24
24
|
class BatchClientPattern
|
@@ -33,11 +33,11 @@ class BatchClientPattern
|
|
33
33
|
@consumer = session.create_consumer(reply_queue)
|
34
34
|
@session = session
|
35
35
|
session.start
|
36
|
-
|
36
|
+
|
37
37
|
@counter_sync = Sync.new
|
38
38
|
@processed = 0
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
# Before re-using a batch pattern, reset all internal counters
|
42
42
|
def reset
|
43
43
|
@counter_sync.synchronize(:EX) do
|
@@ -45,12 +45,12 @@ class BatchClientPattern
|
|
45
45
|
@sucessful = 0
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
# Return the current message count
|
50
50
|
def processed
|
51
51
|
@counter_sync.synchronize(:SH) { @sucessful + @processed }
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
# Increment Successful response counter by supplied count
|
55
55
|
def inc_sucessful(count=1)
|
56
56
|
@counter_sync.synchronize(:EX) { @sucessful += count }
|
@@ -60,7 +60,7 @@ class BatchClientPattern
|
|
60
60
|
def sucessful
|
61
61
|
@counter_sync.synchronize(:SH) { @sucessful }
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
# Increment Successful response counter by supplied count
|
65
65
|
def inc_failed(count=1)
|
66
66
|
@counter_sync.synchronize(:EX) { @failed += count }
|
@@ -70,7 +70,7 @@ class BatchClientPattern
|
|
70
70
|
def failed
|
71
71
|
@counter_sync.synchronize(:SH) { @failed }
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
# Send x messages
|
75
75
|
def send(total_count)
|
76
76
|
#print "Sending #{total_count} messages"
|
@@ -86,7 +86,7 @@ class BatchClientPattern
|
|
86
86
|
duration = Time.now - start_time
|
87
87
|
#printf "\nSend %5d msg, %5.2f s, %10.2f msg/s\n", total_count, duration, total_count/duration
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
# Receive Reply messages calling the supplied block for each message
|
91
91
|
# passing in the message received from the server.
|
92
92
|
# After the block returns, the message is automatically acknowledged
|
@@ -102,7 +102,7 @@ class BatchClientPattern
|
|
102
102
|
p exc
|
103
103
|
end
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
def close
|
107
107
|
@producer.close
|
108
108
|
@consumer.close
|
@@ -116,7 +116,7 @@ end
|
|
116
116
|
# Create a Resque Job with the ability to report status
|
117
117
|
#
|
118
118
|
class HornetQJob < Resque::JobWithStatus
|
119
|
-
|
119
|
+
|
120
120
|
# Set the name of the queue to use for this Job Worker
|
121
121
|
@queue = "hornetq_job"
|
122
122
|
|
@@ -126,14 +126,14 @@ class HornetQJob < Resque::JobWithStatus
|
|
126
126
|
batching_size = (options['batching_size'] || 80).to_i
|
127
127
|
address = options['address'] || 'processor'
|
128
128
|
receive_thread = nil
|
129
|
-
|
129
|
+
|
130
130
|
# Create a HornetQ session
|
131
131
|
count = 0
|
132
132
|
HornetQ::Client::Connection.session('hornetq://localhost') do |session|
|
133
133
|
batching_size = total_count if batching_size > total_count
|
134
|
-
|
134
|
+
|
135
135
|
client = BatchClient.new(session, address)
|
136
|
-
|
136
|
+
|
137
137
|
# Start receive thread
|
138
138
|
receive_thread = Thread.new do
|
139
139
|
client.receive do |message|
|
@@ -141,7 +141,7 @@ class HornetQJob < Resque::JobWithStatus
|
|
141
141
|
client.inc_sucessful
|
142
142
|
end
|
143
143
|
end
|
144
|
-
|
144
|
+
|
145
145
|
times = (total_count/batching_size).to_i
|
146
146
|
puts "Performing #{times} loops"
|
147
147
|
times.times do |i|
|
@@ -156,11 +156,11 @@ class HornetQJob < Resque::JobWithStatus
|
|
156
156
|
#puts "\nReceived #{received_count} messages"
|
157
157
|
if received_count >= 0.8 * count
|
158
158
|
puts ""
|
159
|
-
break
|
159
|
+
break
|
160
160
|
end
|
161
161
|
end
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
while client.counter < total_count
|
165
165
|
sleep 0.1
|
166
166
|
print "*"
|
@@ -177,7 +177,7 @@ end
|
|
177
177
|
if __FILE__ == $0
|
178
178
|
# Make sure you have a worker running
|
179
179
|
# jruby resque_worker.rb
|
180
|
-
|
180
|
+
|
181
181
|
options = {
|
182
182
|
'total_count' => (ARGV[0] || 4000).to_i,
|
183
183
|
'batching_size' => (ARGV[1] || 40).to_i,
|
@@ -187,7 +187,7 @@ if __FILE__ == $0
|
|
187
187
|
puts "Creating the HornetQJob"
|
188
188
|
job_id = HornetQJob.create(options)
|
189
189
|
puts "Got back #{job_id}"
|
190
|
-
|
190
|
+
|
191
191
|
# check the status until its complete
|
192
192
|
while status = Resque::Status.get(job_id) and !status.completed? && !status.failed? &&!status.killed?
|
193
193
|
sleep 1
|