march_hare 3.0.0-java → 3.1.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/ext/rabbitmq-client.jar +0 -0
- data/lib/march_hare/session.rb +37 -29
- data/lib/march_hare/thread_pools.rb +37 -6
- data/lib/march_hare/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a1b5c3b68a7999e7a4395f7287ac7a31e05a2d79acd0da0d117339842c491946
|
4
|
+
data.tar.gz: 80484d5a1935a4348d4720293e49c05c89cad8778f0aad2fa28cf39b1bc081e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 160281080b5551e33ca042d868f5f57190f1a4b5997a0a7b3bc354d120826c5bdb999b07d820bb3c7598860c017bd03466449ae4f01d2d971500200a9997b15d
|
7
|
+
data.tar.gz: cad20d0d92a2ccd8e857e2755ca8e59b5b454926604ad72ea16174f43419af968f93b028d07225923912529163dbc61a177a44d3a49cc56688c8a6534c0e76d7
|
data/lib/ext/rabbitmq-client.jar
CHANGED
Binary file
|
data/lib/march_hare/session.rb
CHANGED
@@ -10,10 +10,12 @@ module MarchHare
|
|
10
10
|
java_import com.rabbitmq.client.BlockedListener
|
11
11
|
java_import com.rabbitmq.client.NullTrustManager
|
12
12
|
java_import com.rabbitmq.client.MissedHeartbeatException
|
13
|
+
java_import com.rabbitmq.client.Address
|
13
14
|
|
14
15
|
java_import javax.net.ssl.SSLContext
|
15
16
|
java_import javax.net.ssl.KeyManagerFactory
|
16
17
|
java_import java.security.KeyStore
|
18
|
+
java_import javax.net.ssl.TrustManagerFactory
|
17
19
|
|
18
20
|
# Connection to a RabbitMQ node.
|
19
21
|
#
|
@@ -39,6 +41,8 @@ module MarchHare
|
|
39
41
|
#
|
40
42
|
# @option options [Numeric] :executor_shutdown_timeout (30.0) when recovering from a network failure how long should we wait for the current threadpool to finish handling its messages
|
41
43
|
# @option options [String] :host ("127.0.0.1") Hostname or IP address to connect to
|
44
|
+
# @option options [Array<String>] :hosts (["127.0.0.1"]) Array of hostnames or ips to connect to. The connection returned is the first in the array that succeeds.
|
45
|
+
# @option options [Array<String>] :addresses (["127.0.0.1:5672", "localhost:5673"]) Array of addresses to connect to. The connection returned is the first in the array that succeeds.
|
42
46
|
# @option options [Integer] :port (5672) Port RabbitMQ listens on
|
43
47
|
# @option options [String] :username ("guest") Username
|
44
48
|
# @option options [String] :password ("guest") Password
|
@@ -55,6 +59,10 @@ module MarchHare
|
|
55
59
|
|
56
60
|
if options[:uri]
|
57
61
|
cf.uri = options[:uri] if options[:uri]
|
62
|
+
elsif options[:hosts] || options[:addresses]
|
63
|
+
cf.virtual_host = vhost_from(options) if include_vhost?(options)
|
64
|
+
cf.username = username_from(options) if include_username?(options)
|
65
|
+
cf.password = password_from(options) if include_password?(options)
|
58
66
|
else
|
59
67
|
cf.host = hostname_from(options) if include_host?(options)
|
60
68
|
cf.port = options[:port].to_i if options[:port]
|
@@ -75,12 +83,11 @@ module MarchHare
|
|
75
83
|
case tls
|
76
84
|
when true then
|
77
85
|
cf.use_ssl_protocol
|
78
|
-
|
86
|
+
when String then
|
79
87
|
# TODO: logging
|
80
88
|
$stdout.puts "Using TLS/SSL version #{tls}"
|
81
|
-
|
82
|
-
|
83
|
-
elsif (cert_path = tls_certificate_path_from(options)) && (password = tls_certificate_password_from(options))
|
89
|
+
# Note: `options[:trust_manager] = com.rabbitmq.client.NullTrustManager.new` can be set to disable TLS verification.
|
90
|
+
if (cert_path = tls_certificate_path_from(options)) && (password = tls_certificate_password_from(options))
|
84
91
|
ctx = SSLContext.get_instance(tls)
|
85
92
|
pwd = password.to_java.to_char_array
|
86
93
|
begin
|
@@ -91,7 +98,14 @@ module MarchHare
|
|
91
98
|
kmf = KeyManagerFactory.get_instance("SunX509")
|
92
99
|
kmf.init(ks, pwd)
|
93
100
|
|
94
|
-
|
101
|
+
if options[:trust_manager]
|
102
|
+
ctx.init(kmf.get_key_managers, [options[:trust_manager]], nil)
|
103
|
+
else
|
104
|
+
# use the key store as the trust store
|
105
|
+
tmf = TrustManagerFactory.get_instance(TrustManagerFactory.getDefaultAlgorithm());
|
106
|
+
tmf.init(ks)
|
107
|
+
ctx.init(kmf.get_key_managers, tmf.getTrustManagers(), nil)
|
108
|
+
end
|
95
109
|
|
96
110
|
cf.use_ssl_protocol(ctx)
|
97
111
|
rescue Java::JavaLang::Throwable => e
|
@@ -103,6 +117,8 @@ module MarchHare
|
|
103
117
|
ensure
|
104
118
|
is.close if is
|
105
119
|
end
|
120
|
+
elsif options[:trust_manager]
|
121
|
+
cf.use_ssl_protocol(tls, options[:trust_manager])
|
106
122
|
else
|
107
123
|
cf.use_ssl_protocol(tls)
|
108
124
|
end
|
@@ -137,15 +153,8 @@ module MarchHare
|
|
137
153
|
# we expect this option to be specified in seconds
|
138
154
|
@executor_shutdown_timeout = opts.fetch(:executor_shutdown_timeout, 30.0)
|
139
155
|
|
140
|
-
@
|
141
|
-
@
|
142
|
-
@host_selection_strategy = opts[:host_selection_strategy] || @default_host_selection_strategy
|
143
|
-
|
144
|
-
@connection = if @uses_uri
|
145
|
-
self.new_uri_connection_impl(@uri)
|
146
|
-
else
|
147
|
-
self.new_connection_impl(@hosts, @host_selection_strategy)
|
148
|
-
end
|
156
|
+
@addresses = self.class.adresses_from(opts)
|
157
|
+
@connection = build_new_connection
|
149
158
|
@channels = JavaConcurrent::ConcurrentHashMap.new
|
150
159
|
|
151
160
|
# should automatic recovery from network failures be used?
|
@@ -273,13 +282,7 @@ module MarchHare
|
|
273
282
|
java.lang.Thread.sleep(ms)
|
274
283
|
|
275
284
|
new_connection = converting_rjc_exceptions_to_ruby do
|
276
|
-
reconnecting_on_network_failures(ms)
|
277
|
-
if @uses_uri
|
278
|
-
self.new_uri_connection_impl(@uri)
|
279
|
-
else
|
280
|
-
self.new_connection_impl(@hosts, @host_selection_strategy)
|
281
|
-
end
|
282
|
-
end
|
285
|
+
reconnecting_on_network_failures(ms) { build_new_connection }
|
283
286
|
end
|
284
287
|
self.recover_shutdown_hooks(new_connection)
|
285
288
|
|
@@ -398,8 +401,8 @@ module MarchHare
|
|
398
401
|
end
|
399
402
|
|
400
403
|
# @private
|
401
|
-
def self.
|
402
|
-
options[:hosts] || [hostname_from(options)]
|
404
|
+
def self.adresses_from(options)
|
405
|
+
options[:addresses] || options[:hosts] || [hostname_from(options)]
|
403
406
|
end
|
404
407
|
|
405
408
|
# @private
|
@@ -497,6 +500,8 @@ module MarchHare
|
|
497
500
|
raise ConnectionRefused.new("Connection to #{@cf.host}:#{@cf.port} refused: host unknown")
|
498
501
|
rescue java.net.SocketException => e
|
499
502
|
raise ConnectionRefused.new("Connection to #{@cf.host}:#{@cf.port} failed")
|
503
|
+
rescue java.util.concurrent.TimeoutException => e
|
504
|
+
raise ConnectionRefused.new("Connection to #{@cf.host}:#{@cf.port} failed: timeout")
|
500
505
|
rescue com.rabbitmq.client.AuthenticationFailureException => e
|
501
506
|
raise AuthenticationFailureError.new(@cf.username, @cf.virtual_host, @cf.password.bytesize)
|
502
507
|
rescue com.rabbitmq.client.PossibleAuthenticationFailureException => e
|
@@ -516,18 +521,21 @@ module MarchHare
|
|
516
521
|
end
|
517
522
|
|
518
523
|
# @private
|
519
|
-
def
|
520
|
-
|
521
|
-
|
522
|
-
|
524
|
+
def build_new_connection
|
525
|
+
@uses_uri ? new_uri_connection_impl(@uri) : new_connection_impl(@addresses)
|
526
|
+
end
|
527
|
+
|
528
|
+
# @private
|
529
|
+
def new_connection_impl(addresses)
|
530
|
+
addrs = Address.parse_addresses(addresses.join(','))
|
523
531
|
|
524
532
|
converting_rjc_exceptions_to_ruby do
|
525
533
|
if @executor_factory
|
526
534
|
shut_down_executor_pool_and_await_timeout
|
527
535
|
@executor = @executor_factory.call
|
528
|
-
@cf.new_connection(@executor)
|
536
|
+
@cf.new_connection(@executor, addrs)
|
529
537
|
else
|
530
|
-
@cf.new_connection
|
538
|
+
@cf.new_connection(addrs)
|
531
539
|
end
|
532
540
|
end
|
533
541
|
end
|
@@ -6,27 +6,58 @@ module MarchHare
|
|
6
6
|
class ThreadPools
|
7
7
|
# Returns a new thread pool (JDK executor) of a fixed size.
|
8
8
|
#
|
9
|
+
# @param [Integer] n Number of threads to use
|
10
|
+
#
|
11
|
+
# @option options [Boolean] :use_daemon_threads (false) Should new threads be marked as daemon?
|
12
|
+
#
|
9
13
|
# @return A thread pool (JDK executor)
|
10
|
-
def self.fixed_of_size(n)
|
14
|
+
def self.fixed_of_size(n, use_daemon_threads: false)
|
11
15
|
raise ArgumentError.new("n must be a positive integer!") unless Integer === n
|
12
16
|
raise ArgumentError.new("n must be a positive integer!") unless n > 0
|
13
17
|
|
14
|
-
|
18
|
+
if use_daemon_threads
|
19
|
+
JavaConcurrent::Executors.new_fixed_thread_pool(n, &daemon_thread_factory)
|
20
|
+
else
|
21
|
+
JavaConcurrent::Executors.new_fixed_thread_pool(n)
|
22
|
+
end
|
15
23
|
end
|
16
24
|
|
17
25
|
# Returns a new thread pool (JDK executor) of a fixed size of 1.
|
18
26
|
#
|
27
|
+
# @option options [Boolean] :use_daemon_threads (false) Should new threads be marked as daemon?
|
28
|
+
#
|
19
29
|
# @return A thread pool (JDK executor)
|
20
|
-
def self.single_threaded
|
21
|
-
|
30
|
+
def self.single_threaded(use_daemon_threads: false)
|
31
|
+
if use_daemon_threads
|
32
|
+
JavaConcurrent::Executors.new_single_thread_executor(&daemon_thread_factory)
|
33
|
+
else
|
34
|
+
JavaConcurrent::Executors.new_single_thread_executor
|
35
|
+
end
|
22
36
|
end
|
23
37
|
|
24
38
|
# Returns a new thread pool (JDK executor) that will create new
|
25
39
|
# threads as needed.
|
26
40
|
#
|
41
|
+
# @option options [Boolean] :use_daemon_threads (false) Should new threads be marked as daemon?
|
42
|
+
#
|
27
43
|
# @return A thread pool (JDK executor)
|
28
|
-
def self.dynamically_growing
|
29
|
-
|
44
|
+
def self.dynamically_growing(use_daemon_threads: false)
|
45
|
+
if use_daemon_threads
|
46
|
+
JavaConcurrent::Executors.new_cached_thread_pool(&daemon_thread_factory)
|
47
|
+
else
|
48
|
+
JavaConcurrent::Executors.new_cached_thread_pool
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns a new thread factory that creates daemon threads.
|
53
|
+
#
|
54
|
+
# @option options [ThreadFactory] :base_factory Upstream thread factory used to create threads
|
55
|
+
#
|
56
|
+
# @return A thread factory
|
57
|
+
def self.daemon_thread_factory(base_factory: JavaConcurrent::Executors.default_thread_factory)
|
58
|
+
proc { |runnable|
|
59
|
+
base_factory.new_thread(runnable).tap { |t| t.daemon = true }
|
60
|
+
}
|
30
61
|
end
|
31
62
|
end
|
32
63
|
end
|
data/lib/march_hare/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: march_hare
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Theo Hultberg
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: RabbitMQ client for JRuby built around the official RabbitMQ Java client
|
15
15
|
email:
|
@@ -56,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
56
|
version: '0'
|
57
57
|
requirements: []
|
58
58
|
rubyforge_project: march_hare
|
59
|
-
rubygems_version: 2.6.
|
59
|
+
rubygems_version: 2.6.13
|
60
60
|
signing_key:
|
61
61
|
specification_version: 4
|
62
62
|
summary: RabbitMQ client for JRuby built around the official RabbitMQ Java client
|