active_publisher 0.2.0.pre-java → 0.2.1-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 63df17dc2a58125dcc18b1cb9c7d20f0517da0ac
4
- data.tar.gz: 9bd8dcd05da48bde7c14ff49a3dc10928ab609a6
3
+ metadata.gz: cf0ffccc8074e99fc31d1e5b0a0563e969b59492
4
+ data.tar.gz: b6b3d8c06b6338f902705f4304ce3e8c254b4dda
5
5
  SHA512:
6
- metadata.gz: e8dbdc550e66d0d4182ed96333a03e37ab89466371bc3bc4634ff6d78e1f02e8daeafb5ed3b13f0bc3cb91d793af46ee6954ba2519e148122d8b2dde569a025c
7
- data.tar.gz: d6a7965709096d9f9828afe0655982aaa5ddafa87b3256e44d6c815df4b6467af64bd0236d5f3c49edb9dd366f28dbb2e3011c1373ebd86a8ea9928bf8418bb6
6
+ metadata.gz: e9945b219ab735188e7eae81f0c2038a226f4840dab441e257ad27af6f872a8d40285f5341a0adb8c96d75bdaa058d0c69840eb64c7f731237c5517322035534
7
+ data.tar.gz: f410bf494ace9d0574e014cdc9bd278949851dc5c3cdf1909b90dee23caee3113cc98d7c6652a06764aa536e4cdb2c9f45fb6b2f1d7f1722fb9a051d1553df93
@@ -32,7 +32,10 @@ module ActivePublisher
32
32
  end
33
33
 
34
34
  def size
35
- queue.size
35
+ # Requests might be in flight (out of the queue, but not yet published), so taking the max should be
36
+ # good enough to make sure we're honest about the actual queue size.
37
+ return queue.size if consumer.nil?
38
+ [queue.size, consumer.sampled_queue_size].max
36
39
  end
37
40
 
38
41
  private
@@ -42,9 +45,6 @@ module ActivePublisher
42
45
  @supervisor = ::Thread.new do
43
46
  loop do
44
47
  unless consumer.alive?
45
- # We might need to requeue the last messages popped
46
- current_consumer_messages = consumer.current_messages
47
- queue.concat(current_consumer_messages) unless current_consumer_messages.empty?
48
48
  consumer.kill
49
49
  @consumer = ::ActivePublisher::Async::InMemoryAdapter::ConsumerThread.new(queue)
50
50
  end
@@ -2,7 +2,7 @@ module ActivePublisher
2
2
  module Async
3
3
  module InMemoryAdapter
4
4
  class ConsumerThread
5
- attr_reader :current_messages, :thread, :queue
5
+ attr_reader :thread, :queue, :sampled_queue_size
6
6
 
7
7
  if ::RUBY_PLATFORM == "java"
8
8
  NETWORK_ERRORS = [::MarchHare::Exception, ::Java::ComRabbitmqClient::AlreadyClosedException, ::Java::JavaIo::IOException].freeze
@@ -11,8 +11,8 @@ module ActivePublisher
11
11
  end
12
12
 
13
13
  def initialize(listen_queue)
14
- @current_messages = []
15
14
  @queue = listen_queue
15
+ @sampled_queue_size = queue.size
16
16
  start_thread
17
17
  end
18
18
 
@@ -39,43 +39,36 @@ module ActivePublisher
39
39
  return if alive?
40
40
  @thread = ::Thread.new do
41
41
  loop do
42
- # Write "current_messages" so we can requeue should something happen to the consumer.
43
- @current_messages.concat(queue.pop_up_to(20))
42
+ # Sample the queue size so we don't shutdown when messages are in flight.
43
+ @sampled_queue_size = queue.size
44
+ current_messages = queue.pop_up_to(20)
44
45
 
45
46
  begin
46
47
  # Only open a single connection for each group of messages to an exchange
47
- messages_to_retry = []
48
- @current_messages.group_by(&:exchange_name).each do |exchange_name, messages|
48
+ current_messages.group_by(&:exchange_name).each do |exchange_name, messages|
49
49
  begin
50
+ current_messages -= messages
50
51
  ::ActivePublisher.publish_all(exchange_name, messages)
51
52
  ensure
52
- messages_to_retry.concat(messages)
53
+ current_messages.concat(messages)
53
54
  end
54
55
  end
55
-
56
- # Reset
57
- @current_messages = []
58
56
  rescue *NETWORK_ERRORS
59
57
  # Sleep because connection is down
60
58
  await_network_reconnect
61
- @current_messages.concat(messages_to_retry)
62
59
 
63
60
  # Requeue and try again.
64
- queue.concat(@current_messages) unless @current_messages.empty?
61
+ queue.concat(current_messages)
65
62
  rescue => unknown_error
66
- @current_messages.concat(messages_to_retry)
67
- @current_messages.each do |message|
63
+ current_messages.each do |message|
68
64
  # Degrade to single message publish ... or at least attempt to
69
65
  begin
70
66
  ::ActivePublisher.publish(message.route, message.payload, message.exchange_name, message.options)
71
- rescue => error
67
+ rescue
72
68
  ::ActivePublisher.configuration.error_handler.call(unknown_error, {:route => message.route, :payload => message.payload, :exchange_name => message.exchange_name, :options => message.options})
73
69
  end
74
70
  end
75
71
 
76
- # Do not requeue the message because something else horrible happened.
77
- @current_messages = []
78
-
79
72
  # TODO: Find a way to bubble this out of the thread for logging purposes.
80
73
  # Reraise the error out of the publisher loop. The Supervisor will restart the consumer.
81
74
  raise unknown_error
@@ -1,3 +1,3 @@
1
1
  module ActivePublisher
2
- VERSION = "0.2.0.pre"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_publisher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.pre
4
+ version: 0.2.1
5
5
  platform: java
6
6
  authors:
7
7
  - Brian Stien
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: exe
14
14
  cert_chain: []
15
- date: 2016-11-17 00:00:00.000000000 Z
15
+ date: 2016-12-07 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  requirement: !ruby/object:Gem::Requirement
@@ -145,12 +145,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
145
  version: '0'
146
146
  required_rubygems_version: !ruby/object:Gem::Requirement
147
147
  requirements:
148
- - - ">"
148
+ - - ">="
149
149
  - !ruby/object:Gem::Version
150
- version: 1.3.1
150
+ version: '0'
151
151
  requirements: []
152
152
  rubyforge_project:
153
- rubygems_version: 2.6.7
153
+ rubygems_version: 2.4.8
154
154
  signing_key:
155
155
  specification_version: 4
156
156
  summary: Aims to make publishing work across MRI and jRuby painless and add some nice features like automatially publishing lifecycle events for ActiveRecord models.