jruby-hornetq 0.2.5.alpha → 0.3.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/HISTORY.md +12 -0
  2. data/Rakefile +13 -1
  3. data/bin/hornetq_server +2 -2
  4. data/examples/README +6 -0
  5. data/examples/{client/advanced → advanced}/batch_client.rb +18 -34
  6. data/examples/advanced/bytes_producer.rb +25 -0
  7. data/examples/advanced/client.rb +56 -0
  8. data/examples/{client/advanced/multi_client.rb → advanced/client_session_pooling.rb} +29 -25
  9. data/examples/advanced/consume_on_message.rb +50 -0
  10. data/examples/advanced/consumer.rb +31 -0
  11. data/examples/{client/advanced → advanced}/hornetq.yml +8 -6
  12. data/examples/advanced/multi_client.rb +71 -0
  13. data/examples/advanced/producer.rb +37 -0
  14. data/examples/advanced/server.rb +44 -0
  15. data/examples/client-server/client.rb +40 -0
  16. data/examples/client-server/server.rb +37 -0
  17. data/examples/producer-consumer/consume_all.rb +25 -0
  18. data/examples/producer-consumer/consume_on_message.rb +46 -0
  19. data/examples/producer-consumer/consumer.rb +27 -0
  20. data/examples/producer-consumer/producer.rb +32 -0
  21. data/examples/{client/resque → resque}/hornetq_job.rb +2 -2
  22. data/examples/{client/resque → resque}/processor.rb +1 -1
  23. data/examples/{client/resque → resque}/readme.md +0 -0
  24. data/examples/{client/resque → resque}/resque_conf.rb +0 -0
  25. data/examples/{client/resque → resque}/resque_worker.rb +0 -0
  26. data/examples/{client/resque → resque}/sleep_job.rb +0 -0
  27. data/examples/{server → server-config}/backup_server.yml +0 -0
  28. data/examples/{server → server-config}/live_server.yml +0 -0
  29. data/examples/{server → server-config}/standalone_server.yml +0 -0
  30. data/examples/{client → simple}/invm.rb +6 -7
  31. data/examples/{advanced/transaction-failover → transaction-failover}/README +0 -0
  32. data/examples/{advanced/transaction-failover → transaction-failover}/consumer.rb +4 -1
  33. data/examples/{advanced/transaction-failover → transaction-failover}/hornetq.yml +6 -3
  34. data/examples/{advanced/transaction-failover → transaction-failover}/producer.rb +8 -3
  35. data/examples/{simple_worker → worker}/README +0 -0
  36. data/examples/worker/hornetq.yml +26 -0
  37. data/examples/worker/producer.rb +71 -0
  38. data/examples/{simple_worker → worker}/test_object.rb +0 -0
  39. data/examples/worker/worker.rb +72 -0
  40. data/lib/hornetq/client.rb +1 -1
  41. data/lib/hornetq/client/{factory.rb → connection.rb} +153 -86
  42. data/lib/hornetq/client/message_handler.rb +3 -3
  43. data/lib/hornetq/client/org_hornetq_api_core_client_client_session.rb +187 -26
  44. data/lib/hornetq/client/org_hornetq_core_client_impl_client_consumer_impl.rb +26 -9
  45. data/lib/hornetq/client/org_hornetq_core_client_impl_client_message_impl.rb +190 -35
  46. data/lib/hornetq/client/session_pool.rb +4 -4
  47. data/lib/hornetq/common/log_delegate.rb +17 -15
  48. data/lib/hornetq/common/logging.rb +20 -7
  49. data/lib/hornetq/common/org_hornetq_core_logging_logger.rb +11 -9
  50. data/lib/hornetq/server.rb +86 -3
  51. data/lib/hornetq/{org_hornetq_core_server_hornet_q_server.rb → server/org_hornetq_core_server_hornet_q_server.rb} +1 -1
  52. data/lib/hornetq/uri.rb +4 -0
  53. data/test/client_connection_test.rb +158 -0
  54. data/test/logging_test.rb +32 -0
  55. data/test/server_test.rb +208 -0
  56. metadata +47 -48
  57. data/examples/client/advanced/bytes_producer.rb +0 -21
  58. data/examples/client/advanced/client.rb +0 -47
  59. data/examples/client/advanced/consumer.rb +0 -35
  60. data/examples/client/advanced/multi_consumer.rb +0 -54
  61. data/examples/client/advanced/producer.rb +0 -35
  62. data/examples/client/advanced/server.rb +0 -39
  63. data/examples/client/client.rb +0 -31
  64. data/examples/client/consumer.rb +0 -22
  65. data/examples/client/data/bindings/hornetq-bindings-1.bindings +0 -0
  66. data/examples/client/data/bindings/hornetq-bindings-2.bindings +0 -0
  67. data/examples/client/data/journal/hornetq-data-1.hq +0 -0
  68. data/examples/client/data/journal/hornetq-data-2.hq +0 -0
  69. data/examples/client/producer.rb +0 -21
  70. data/examples/client/server.rb +0 -31
  71. data/examples/simple_worker/hornetq.yml +0 -34
  72. data/examples/simple_worker/producer.rb +0 -54
  73. data/examples/simple_worker/worker.rb +0 -49
  74. data/lib/data/bindings/hornetq-bindings-1.bindings +0 -0
  75. data/lib/data/bindings/hornetq-bindings-2.bindings +0 -0
  76. data/lib/hornetq/server/factory.rb +0 -87
  77. data/test/server_factory_test.rb +0 -183
@@ -1,54 +0,0 @@
1
- #
2
- # HornetQ Consumer:
3
- # Multi-threaded Consumer
4
- #
5
-
6
- # Allow examples to be run in-place without requiring a gem install
7
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../../lib'
8
-
9
- require 'rubygems'
10
- require 'yaml'
11
- require 'hornetq'
12
-
13
- # Arguments: 'number of threads' 'timeout'
14
- $thread_count = (ARGV[0] || 3).to_i
15
- $timeout = (ARGV[1] || 1000).to_i
16
-
17
- config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
18
-
19
- def worker(id, session)
20
- begin
21
- consumer = session.create_consumer('jms.queue.ExampleQueue')
22
- session.start
23
-
24
- count = 0
25
- start_time = Time.now
26
- while message = consumer.receive($timeout)
27
- count = count + 1
28
- message.acknowledge
29
- #puts "=================================="
30
- #text = message.body
31
- #p text
32
- #p message
33
- puts "Durable" if message.durable
34
- print "#{id}."
35
- end
36
- duration = Time.now - start_time - $timeout/1000
37
- puts "\nReceived #{count} messages in #{duration} seconds at #{count/duration} messages per second"
38
- rescue Exception => exc
39
- puts "Thread #{id} Terminating"
40
- p exc
41
- ensure
42
- session.close
43
- end
44
- end
45
-
46
- # Create a HornetQ session
47
- HornetQ::Client::Factory.create_factory(config[:connector]) do |factory|
48
- threads = []
49
- $thread_count.times do |i|
50
- session = factory.create_session(config[:session])
51
- threads << Thread.new { worker(i, session) }
52
- end
53
- threads.each {|t| t.join}
54
- end
@@ -1,35 +0,0 @@
1
- #
2
- # HornetQ Producer:
3
- # Write messages to the queue
4
- #
5
-
6
- # Allow examples to be run in-place without requiring a gem install
7
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../../lib'
8
-
9
- require 'rubygems'
10
- require 'yaml'
11
- require 'hornetq'
12
-
13
- count = (ARGV[0] || 1).to_i
14
- config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
15
-
16
- # Create a HornetQ session
17
- HornetQ::Client::Factory.session(config) do |session|
18
- producer = session.create_producer('jms.queue.ExampleQueue')
19
- start_time = Time.now
20
-
21
- puts "Sending messages"
22
- (1..count).each do |i|
23
- message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
24
- # Set the message body text
25
- message.body = "#{Time.now}: ### Hello, World ###"
26
- # Send message to the queue
27
- producer.send(message)
28
- #puts message
29
- puts "#{i}\n" if i%1000 == 0
30
- puts "Durable" if message.durable
31
- end
32
-
33
- duration = Time.now - start_time
34
- puts "Delivered #{count} messages in #{duration} seconds at #{count/duration} messages per second"
35
- end
@@ -1,39 +0,0 @@
1
- #
2
- # HornetQ Consumer:
3
- # Reply to a request
4
- #
5
-
6
- # Allow examples to be run in-place without requiring a gem install
7
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../../lib'
8
-
9
- require 'rubygems'
10
- require 'yaml'
11
- require 'hornetq'
12
-
13
- timeout = (ARGV[0] || 60000).to_i
14
-
15
- config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')['development']
16
-
17
- # Create a HornetQ session
18
- HornetQ::Client::Factory.session(config) do |session|
19
- server = session.create_server('jms.queue.ExampleQueue', timeout)
20
- session.start
21
-
22
- count = 0
23
- start_time = Time.now
24
- puts "Server started and waiting for requests ..."
25
- server.run do |request_message|
26
- count += 1
27
- print '.'
28
- puts "#{count}" if count%1000 == 0
29
- puts "Durable" if request_message.durable
30
- reply_message = session.create_message(HornetQ::Client::Message::TEXT_TYPE, false)
31
- reply_message.body = "Test Response"
32
- reply_message
33
- end
34
-
35
- duration = Time.now - start_time - timeout/1000
36
- puts "\nReceived #{count} requests in #{duration} seconds at #{count/duration} messages per second"
37
-
38
- server.close
39
- end
@@ -1,31 +0,0 @@
1
- #
2
- # HornetQ Requestor:
3
- # Submit a request and wait for a reply
4
- #
5
-
6
- # Allow examples to be run in-place without requiring a gem install
7
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
-
9
- require 'rubygems'
10
- require 'hornetq'
11
-
12
- timeout = (ARGV[0] || 5000).to_i
13
-
14
- HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
15
- requestor = session.create_requestor('jms.queue.ExampleQueue')
16
-
17
- # Create non-durable message
18
- message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
19
- message.body = "Request Current Time"
20
-
21
- # Send message to the queue
22
- puts "Send request message and wait for Reply"
23
- if reply = requestor.request(message, timeout)
24
- puts "Received Response: #{reply.inspect}"
25
- puts " Message: #{reply.body.inspect}"
26
- else
27
- puts "Time out, No reply received after #{timeout/1000} seconds"
28
- end
29
-
30
- requestor.close
31
- end
@@ -1,22 +0,0 @@
1
- #
2
- # HornetQ Consumer:
3
- # Write a single message to the queue
4
- #
5
-
6
- # Allow examples to be run in-place without requiring a gem install
7
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
-
9
- require 'rubygems'
10
- require 'hornetq'
11
-
12
- HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
13
- consumer = session.create_consumer('jms.queue.ExampleQueue')
14
-
15
- # Receive a single message, return immediately if no message available
16
- if message = consumer.receive_immediate
17
- puts "Received:[#{message.body}]"
18
- message.acknowledge
19
- else
20
- puts "No message found"
21
- end
22
- end
@@ -1,21 +0,0 @@
1
- #
2
- # HornetQ Producer:
3
- # Write messages to the queue
4
- #
5
-
6
- # Allow examples to be run in-place without requiring a gem install
7
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
-
9
- require 'rubygems'
10
- require 'hornetq'
11
-
12
- HornetQ::Client::Factory.session('hornetq://localhost') do |session|
13
- # Create Producer so that we can send messages to the Address 'jms.queue.ExampleQueue'
14
- producer = session.create_producer('jms.queue.ExampleQueue')
15
-
16
- # Create a non-durable message to send
17
- message = session.create_message(HornetQ::Client::Message::TEXT_TYPE,false)
18
- message.body = "#{Time.now}: ### Hello, World ###"
19
-
20
- producer.send(message)
21
- end
@@ -1,31 +0,0 @@
1
- #
2
- # HornetQ Consumer:
3
- # Reply to a request
4
- #
5
-
6
- # Allow examples to be run in-place without requiring a gem install
7
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
8
-
9
- require 'rubygems'
10
- require 'hornetq'
11
-
12
- timeout = (ARGV[0] || 60000).to_i
13
-
14
- HornetQ::Client::Factory.start(:connector=> {:uri => 'hornetq://localhost'}) do |session|
15
- server = session.create_server('jms.queue.ExampleQueue', timeout)
16
-
17
- puts "Waiting for Requests..."
18
- server.run do |request_message|
19
- puts "Received:[#{request_message.body}]"
20
-
21
- # Create Reply Message
22
- reply_message = session.create_message(HornetQ::Client::Message::TEXT_TYPE, false)
23
- reply_message.body = "Echo [#{request_message.body}]"
24
-
25
- # The result of the block is the message to be sent back
26
- reply_message
27
- end
28
-
29
- # Server will stop after timeout period after no messages received. Set to 0 to wait foreve
30
- server.close
31
- end
@@ -1,34 +0,0 @@
1
- standalone_server:
2
- :uri: hornetq://localhost:15445
3
- :data_directory: ./data
4
- :persistence_enabled: true
5
- :security_enabled: false
6
-
7
- client:
8
- :connector:
9
- :uri: hornetq://localhost:15445
10
- :session:
11
- :username: guest
12
- :password: guest
13
- :session_pool:
14
- :pool_size: 3
15
- :pool_warn_timeout: 0.25
16
- :username: guest
17
- :password: guest
18
-
19
- :addresses:
20
- address1:
21
- :serialize: ruby_marshal
22
- :unique: true
23
- :durable: true
24
- :queues:
25
- queue1_1:
26
- queue1_2:
27
-
28
- address2:
29
- :serialize: json
30
- :unique: false
31
- :durable: false
32
- :queues:
33
- queue2_1:
34
- queue2_2:
@@ -1,54 +0,0 @@
1
- #!/usr/bin/env jruby
2
- #
3
- # HornetQ Producer:
4
- # Write messages to the queue
5
- #
6
-
7
- require 'rubygems'
8
- require 'yaml'
9
- require 'hornetq'
10
- require 'logger'
11
- require 'test_object'
12
-
13
- config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')
14
- client = config['client']
15
-
16
- # Create a HornetQ session
17
- logger = Logger.new($stdout)
18
- factory = HornetQ::Client::Factory.new(client[:connector])
19
- session_pool = factory.create_session_pool(client[:session_pool])
20
- producer_manager = HornetQ::Client::ProducerManager.new(session_pool, client[:addresses], true)
21
-
22
- ['HUP', 'INT', 'TERM'].each do |signal_name|
23
- Signal.trap(signal_name) do
24
- puts "caught #{signal_name}"
25
- $stopped = true
26
- end
27
- end
28
-
29
- $stopped = false
30
- threads = []
31
- (1..5).each do |i|
32
- threads << Thread.new(i) do |thread_count|
33
- msg_count = 0
34
- while !$stopped
35
- msg_count += 1
36
- obj = TestObject.new("Message ##{thread_count}-#{msg_count}")
37
- producer_manager.send('address1', obj)
38
- sleep 1
39
- end
40
- end
41
- end
42
- (6..10).each do |i|
43
- threads << Thread.new(i) do |thread_count|
44
- msg_count = 0
45
- while !$stopped
46
- msg_count += 1
47
- obj = {:thread => thread_count, :message => msg_count}
48
- producer_manager.send('address2', obj)
49
- sleep 2
50
- end
51
- end
52
- end
53
-
54
- threads.each { |thread| thread.join }
@@ -1,49 +0,0 @@
1
- #!/usr/bin/env jruby
2
- #
3
- # HornetQ Consumer:
4
- # Write messages to the queue
5
- #
6
-
7
- require 'rubygems'
8
- require 'yaml'
9
- require 'hornetq'
10
- require 'test_object'
11
-
12
- $config = YAML.load_file(File.dirname(__FILE__) + '/hornetq.yml')
13
- $client = $config['client']
14
- factory = HornetQ::Client::Factory.new($client[:connector])
15
- $consumer_manager = HornetQ::Client::ConsumerManager.new(factory, $client[:session], $client[:addresses])
16
-
17
- ['HUP', 'INT', 'TERM'].each do |signal_name|
18
- Signal.trap(signal_name) do
19
- puts "caught #{signal_name}"
20
- consumer_manager.close
21
- end
22
- end
23
-
24
- $threads = []
25
- def create_workers(address, queue, count, sleep_time)
26
- address_config = $client[:addresses][address]
27
- queue_config = address_config[:queues][queue]
28
- (1..count).each do |i|
29
- $threads << Thread.new(i) do |thread_count|
30
- prefix = "#{address}-#{queue}-#{thread_count}"
31
- begin
32
- $consumer_manager.each(address,queue) do |obj|
33
- puts "#{prefix} read #{obj.inspect}"
34
- sleep sleep_time
35
- end
36
- puts "#{prefix} end of thread"
37
- rescue Exception => e
38
- puts "#{prefix} Exception: #{e.message}\n#{e.backtrace.join("\n")}"
39
- end
40
- end
41
- end
42
- end
43
-
44
- create_workers('address1', 'queue1_1', 5, 1)
45
- create_workers('address1', 'queue1_2', 5, 2)
46
- create_workers('address2', 'queue2_1', 5, 2)
47
- create_workers('address2', 'queue2_2', 5, 1)
48
-
49
- $threads.each { |thread| thread.join }
@@ -1,87 +0,0 @@
1
- module HornetQ::Server
2
-
3
- class Factory
4
- def self.create_server(parms={})
5
- HornetQ::Server.load_requirements
6
-
7
- if parms.kind_of?(String)
8
- uri = HornetQ::URI.new(parms)
9
- parms = uri.params
10
- else
11
- raise "Missing :uri param in HornetQ::Server.create_server" unless parms[:uri]
12
- uri = HornetQ::URI.new(parms.delete(:uri))
13
- # parms override uri params
14
- parms = uri.params.merge(parms)
15
- end
16
- config = Java::org.hornetq.core.config.impl.ConfigurationImpl.new
17
- data_directory = parms.delete(:data_directory) || HornetQ::DEFAULT_DATA_DIRECTORY
18
- config.paging_directory = "#{data_directory}/paging"
19
- config.bindings_directory = "#{data_directory}/bindings"
20
- config.journal_directory = "#{data_directory}/journal"
21
- config.large_messages_directory = "#{data_directory}/large-messages"
22
-
23
- if uri.host == 'invm'
24
- acceptor = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::INVM_ACCEPTOR_CLASS_NAME)
25
- config.persistence_enabled = false
26
- config.security_enabled = false
27
- else
28
- acceptor = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::NETTY_ACCEPTOR_CLASS_NAME, {'host' => uri.host, 'port' => uri.port })
29
- connector = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::NETTY_CONNECTOR_CLASS_NAME, {'host' => uri.host, 'port' => uri.port })
30
- connector_conf_map = java.util.HashMap.new
31
- connector_conf_map.put('netty-connector', connector)
32
- config.connector_configurations = connector_conf_map
33
- end
34
- acceptor_conf_set = java.util.HashSet.new
35
- acceptor_conf_set.add(acceptor)
36
- config.acceptor_configurations = acceptor_conf_set
37
-
38
- if Java::org.hornetq.core.journal.impl.AIOSequentialFileFactory.isSupported
39
- config.journal_type = Java::org.hornetq.core.server.JournalType::ASYNCIO
40
- else
41
- puts("AIO wasn't located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal");
42
- config.journal_type = Java::org.hornetq.core.server.JournalType::NIO
43
- end
44
-
45
- if parms[:backup]
46
- puts "backup"
47
- config.backup = true
48
- config.shared_store = false
49
- elsif uri.backup_host
50
- puts "live"
51
- #backup_params.put('reconnectAttempts', -1)
52
- backup_connector = Java::org.hornetq.api.core.TransportConfiguration.new(HornetQ::NETTY_CONNECTOR_CLASS_NAME, {'host' => uri.backup_host, 'port' => uri.backup_port })
53
- connector_conf_map.put('backup-connector', backup_connector)
54
- config.backup_connector_name = 'backup-connector'
55
- elsif uri.host == 'invm'
56
- puts 'invm'
57
- else
58
- puts 'standalone'
59
- end
60
-
61
- parms.each_pair do |key, val|
62
- method = key.to_s+'='
63
- if config.respond_to? method
64
- config.send method, val
65
- #puts "Debug: #{key} = #{config.send key}" if config.respond_to? key.to_sym
66
- else
67
- puts "Warning: Option:#{key} class=#{key.class} with value:#{val} is invalid and being ignored"
68
- end
69
- end
70
-
71
- return Java::org.hornetq.core.server.HornetQServers.newHornetQServer(config)
72
- end
73
-
74
- # Start a new server instance and stop it once the supplied block completes
75
- def self.start(params={}, &block)
76
- server = nil
77
- begin
78
- server = self.create_server(params)
79
- server.start
80
- block.call(server)
81
- ensure
82
- server.stop if server
83
- end
84
- end
85
-
86
- end
87
- end