hot_bunnies 2.0.0.pre6-java → 2.0.0.pre7-java
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/lib/hot_bunnies/channel.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require "hot_bunnies/shutdown_listener"
|
2
3
|
|
3
4
|
module HotBunnies
|
4
5
|
class Channel
|
5
|
-
attr_reader :session
|
6
|
+
attr_reader :session, :consumers
|
6
7
|
|
7
8
|
def initialize(session, delegate)
|
8
9
|
@connection = session
|
@@ -12,12 +13,20 @@ module HotBunnies
|
|
12
13
|
# executors when the channel is closed. This frees library users
|
13
14
|
# from having to worry about this. MK.
|
14
15
|
@consumers = ConcurrentHashMap.new
|
16
|
+
|
17
|
+
on_shutdown do |ch, cause|
|
18
|
+
ch.gracefully_shut_down_consumers
|
19
|
+
end
|
15
20
|
end
|
16
21
|
|
17
22
|
def client
|
18
23
|
@connection
|
19
24
|
end
|
20
25
|
|
26
|
+
def connection
|
27
|
+
@connection
|
28
|
+
end
|
29
|
+
|
21
30
|
def id
|
22
31
|
@delegate.channel_number
|
23
32
|
end
|
@@ -42,6 +51,12 @@ module HotBunnies
|
|
42
51
|
v
|
43
52
|
end
|
44
53
|
|
54
|
+
def on_shutdown(&block)
|
55
|
+
sh = ShutdownListener.new(self, &block)
|
56
|
+
@connection.add_shutdown_listener(sh)
|
57
|
+
|
58
|
+
sh
|
59
|
+
end
|
45
60
|
|
46
61
|
# @group Exchanges
|
47
62
|
|
@@ -297,6 +312,13 @@ module HotBunnies
|
|
297
312
|
@consumers.delete(consumer_tag)
|
298
313
|
end
|
299
314
|
|
315
|
+
# @private
|
316
|
+
def gracefully_shut_down_consumers
|
317
|
+
@consumers.each do |tag, consumer|
|
318
|
+
consumer.gracefully_shut_down
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
300
322
|
# Executes a block, catching Java exceptions RabbitMQ Java client throws and
|
301
323
|
# transforms them to Ruby exceptions that are then re-raised.
|
302
324
|
#
|
@@ -10,6 +10,8 @@ module HotBunnies
|
|
10
10
|
|
11
11
|
@cancelling = JavaConcurrent::AtomicBoolean.new
|
12
12
|
@cancelled = JavaConcurrent::AtomicBoolean.new
|
13
|
+
|
14
|
+
@terminated = JavaConcurrent::AtomicBoolean.new
|
13
15
|
end
|
14
16
|
|
15
17
|
def handleDelivery(consumer_tag, envelope, properties, body)
|
@@ -37,11 +39,15 @@ module HotBunnies
|
|
37
39
|
f.call(@channel, self, consumer_tag)
|
38
40
|
end
|
39
41
|
end
|
42
|
+
|
43
|
+
@terminated.set(true)
|
40
44
|
end
|
41
45
|
|
42
46
|
def handleCancelOk(consumer_tag)
|
43
47
|
@cancelled.set(true)
|
44
48
|
@channel.unregister_consumer(consumer_tag)
|
49
|
+
|
50
|
+
@terminated.set(true)
|
45
51
|
end
|
46
52
|
|
47
53
|
def start
|
@@ -55,6 +61,7 @@ module HotBunnies
|
|
55
61
|
@cancelling.set(true)
|
56
62
|
response = channel.basic_cancel(consumer_tag)
|
57
63
|
@cancelled.set(true)
|
64
|
+
@terminated.set(true)
|
58
65
|
|
59
66
|
response
|
60
67
|
end
|
@@ -64,7 +71,11 @@ module HotBunnies
|
|
64
71
|
end
|
65
72
|
|
66
73
|
def active?
|
67
|
-
!
|
74
|
+
!terminated?
|
75
|
+
end
|
76
|
+
|
77
|
+
def terminated?
|
78
|
+
@terminated.get
|
68
79
|
end
|
69
80
|
end
|
70
81
|
|
@@ -127,6 +138,7 @@ module HotBunnies
|
|
127
138
|
unless @executor.await_termination(1, JavaConcurrent::TimeUnit::SECONDS)
|
128
139
|
@executor.shutdown_now
|
129
140
|
end
|
141
|
+
@terminated.set(true)
|
130
142
|
end
|
131
143
|
alias maybe_shut_down_executor gracefully_shut_down
|
132
144
|
alias gracefully_shutdown gracefully_shut_down
|
@@ -135,6 +147,8 @@ module HotBunnies
|
|
135
147
|
class BlockingCallbackConsumer < CallbackConsumer
|
136
148
|
include JavaConcurrent
|
137
149
|
|
150
|
+
POISON = :__poison__
|
151
|
+
|
138
152
|
def initialize(channel, buffer_size, opts, callback)
|
139
153
|
super(channel, callback)
|
140
154
|
if buffer_size
|
@@ -151,7 +165,13 @@ module HotBunnies
|
|
151
165
|
until (@cancelling.get || @cancelled.get) || JavaConcurrent::Thread.current_thread.interrupted?
|
152
166
|
begin
|
153
167
|
pair = @internal_queue.take
|
154
|
-
|
168
|
+
if pair
|
169
|
+
if pair == POISON
|
170
|
+
@cancelling.set(true)
|
171
|
+
else
|
172
|
+
callback(*pair)
|
173
|
+
end
|
174
|
+
end
|
155
175
|
rescue InterruptedException => e
|
156
176
|
interrupted = true
|
157
177
|
end
|
@@ -159,6 +179,7 @@ module HotBunnies
|
|
159
179
|
while (pair = @internal_queue.poll)
|
160
180
|
callback(*pair)
|
161
181
|
end
|
182
|
+
@terminated.set(true)
|
162
183
|
if interrupted
|
163
184
|
JavaConcurrent::Thread.current_thread.interrupt
|
164
185
|
end
|
@@ -175,5 +196,13 @@ module HotBunnies
|
|
175
196
|
end
|
176
197
|
end
|
177
198
|
end
|
199
|
+
|
200
|
+
def gracefully_shut_down
|
201
|
+
@cancelling.set(true)
|
202
|
+
@internal_queue.offer(POISON)
|
203
|
+
|
204
|
+
@terminated.set(true)
|
205
|
+
end
|
206
|
+
|
178
207
|
end
|
179
208
|
end
|
data/lib/hot_bunnies/session.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "hot_bunnies/shutdown_listener"
|
3
|
+
|
1
4
|
module HotBunnies
|
2
5
|
java_import com.rabbitmq.client.ConnectionFactory
|
3
6
|
java_import com.rabbitmq.client.Connection
|
@@ -42,6 +45,8 @@ module HotBunnies
|
|
42
45
|
new(cf)
|
43
46
|
end
|
44
47
|
|
48
|
+
attr_reader :thread, :channels
|
49
|
+
|
45
50
|
|
46
51
|
def initialize(connection_factory)
|
47
52
|
@cf = connection_factory
|
@@ -49,6 +54,8 @@ module HotBunnies
|
|
49
54
|
self.new_connection
|
50
55
|
end
|
51
56
|
@channels = ConcurrentHashMap.new
|
57
|
+
|
58
|
+
@thread = Thread.current
|
52
59
|
end
|
53
60
|
|
54
61
|
def create_channel(n = nil)
|
@@ -72,6 +79,14 @@ module HotBunnies
|
|
72
79
|
@connection.close
|
73
80
|
end
|
74
81
|
|
82
|
+
def on_shutdown(&block)
|
83
|
+
sh = ShutdownListener.new(self, &block)
|
84
|
+
@connection.add_shutdown_listener(sh)
|
85
|
+
|
86
|
+
sh
|
87
|
+
end
|
88
|
+
|
89
|
+
|
75
90
|
def flush
|
76
91
|
@connection.flush
|
77
92
|
end
|
@@ -84,6 +99,12 @@ module HotBunnies
|
|
84
99
|
@connection.__send__(selector, *args)
|
85
100
|
end
|
86
101
|
|
102
|
+
# @return [String]
|
103
|
+
# @api public
|
104
|
+
def to_s
|
105
|
+
"#<#{self.class.name}:#{object_id} #{@cf.username}@#{@cf.host}:#{@cf.port}, vhost=#{@cf.virtual_host}>"
|
106
|
+
end
|
107
|
+
|
87
108
|
|
88
109
|
#
|
89
110
|
# Implementation
|
@@ -164,6 +185,8 @@ module HotBunnies
|
|
164
185
|
block.call
|
165
186
|
rescue java.net.ConnectException => e
|
166
187
|
raise ConnectionRefused.new("Connection to #{@cf.host}:#{@cf.port} refused")
|
188
|
+
rescue java.net.UnknownHostException => e
|
189
|
+
raise ConnectionRefused.new("Connection to #{@cf.host}:#{@cf.port} refused: host unknown")
|
167
190
|
rescue com.rabbitmq.client.PossibleAuthenticationFailureException => e
|
168
191
|
raise PossibleAuthenticationFailureError.new(@cf.username, @cf.virtual_host, @cf.password.bytesize)
|
169
192
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module HotBunnies
|
2
|
+
class ShutdownListener
|
3
|
+
include com.rabbitmq.client.ShutdownListener
|
4
|
+
|
5
|
+
def initialize(entity, &block)
|
6
|
+
# connection or channel
|
7
|
+
@entity = entity
|
8
|
+
@block = block
|
9
|
+
end
|
10
|
+
|
11
|
+
def shutdown_completed(cause)
|
12
|
+
@block.call(@entity, cause)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/hot_bunnies/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hot_bunnies
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.pre7
|
5
5
|
prerelease: 6
|
6
6
|
platform: java
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-07-
|
13
|
+
date: 2013-07-02 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: RabbitMQ client for JRuby built around the official RabbitMQ Java client
|
16
16
|
email:
|
@@ -30,6 +30,7 @@ files:
|
|
30
30
|
- lib/hot_bunnies/metadata.rb
|
31
31
|
- lib/hot_bunnies/queue.rb
|
32
32
|
- lib/hot_bunnies/session.rb
|
33
|
+
- lib/hot_bunnies/shutdown_listener.rb
|
33
34
|
- lib/hot_bunnies/version.rb
|
34
35
|
homepage: http://hotbunnies.info
|
35
36
|
licenses: []
|