watership 0.5.0 → 0.7.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7297b8a86504f62a6feb98b9ac8e19cdb75a3ed
4
- data.tar.gz: 7b1d6e124680d147984f74d95ba19ae214b1d0a5
3
+ metadata.gz: d9d75218a0e116036973c5143327e02200e90d5e
4
+ data.tar.gz: 8f2ab743f84f7816d64c4bf57d9830c559c2f025
5
5
  SHA512:
6
- metadata.gz: 9020adfcab698655ba127462d402a55b272ae6b1e8526325d956402286dc4feb3891dfb8eed2b4659f85ebd94049b6408f22275efe0f5a82e231ec121f315929
7
- data.tar.gz: 292aa5b5b7d0d8a3af1a1acadba27549c034c35048b4d035eba8f5945991127c11966b51e2b50d9e962285e0c526944d595d8f07a17f0aba0698215b9287d3d8
6
+ metadata.gz: 7aff983c5122210505b47edcf200099e1fb4f530bdf0efaf6ae0cd624f7676e33bdb42ad772d8553855ec469735a6ba7eee9e1777e61c3f4b183eb3e67093cb5
7
+ data.tar.gz: 399868642a4ab1ba89881c720d053e940d472d9b5c7c7deeb45fe239579251e6281eee4aa97f829ae51c92ff3e9b48b3b3299097f40b3ce8a3eac3164b57f226
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.1 - 2014-07-22
4
+ * Fix a critical bug during reconnect
5
+
6
+ ## 0.7.0 - 2014-07-21 [yanked]
7
+ * Adding bang methods to re-raise recused errors
8
+
9
+ ## 0.6.0 - 2014-07-18 [yanked]
10
+ * Acknoledges failed messages after they are re-enqueued
11
+ * Added thread safety
12
+ * Added bugsnug support
13
+
14
+ ## 0.5.5 - 2014-07-12
15
+ * Adding general support for Bugsnag
16
+
17
+ ## 0.5.0 - 2014-07-10
18
+ * Add support for running multiple threads in a single consumer.
19
+
3
20
  ## 0.4.0 - 2014-07-10
4
21
  * Add retry behavior on messages that generate exceptions in `Watership::Consumer`.
5
22
 
@@ -8,19 +8,21 @@ module Watership
8
8
  @consumer = consumer
9
9
  @url = url
10
10
  @prefetch = channel_options.delete(:prefetch) || Integer(ENV.fetch("RABBIT_CONSUMER_PREFETCH", 200))
11
+ @concurrency = channel_options.delete(:concurrency) || 1
11
12
  @channel_opts = {durable: true}.merge(channel_options)
12
13
  @queue_opts = {block: false, ack: true}.merge(queue_options)
13
14
  end
14
15
 
15
- def consume(concurrency = 1)
16
+ def consume(donotuse = :donotuse)
17
+ logger.error("Don't provide an argument to Consumer#consume") unless donotuse == :donotuse
18
+
16
19
  Thread.abort_on_exception = true
17
- concurrency.times do
20
+ @concurrency.times do
18
21
  queue.subscribe(@queue_opts) do |delivery_info, properties, payload|
19
- success = true
20
- data = JSON.parse(payload)
21
22
  begin
23
+ data = JSON.parse(payload)
22
24
  @consumer.call(data)
23
- ack_message(delivery_info.delivery_tag)
25
+ success = true
24
26
  rescue StandardError => exception
25
27
  logger.error "Error thrown in subscribe block"
26
28
  logger.error exception.message
@@ -28,19 +30,21 @@ module Watership
28
30
 
29
31
  retries = data["retries"] || 0
30
32
 
33
+ Airbrake.notify(exception) if defined?(Airbrake)
34
+ Bugsnag.notify(exception, data: {payload: data, retries: retries}) if defined?(Bugsnag)
35
+
31
36
  if retries.to_i < 3
32
37
  Watership.enqueue(name: @consumer.class::QUEUE, payload: data.merge({retries: retries+1}))
38
+ success = true
33
39
  end
34
-
35
- Airbrake.notify(exception) if defined?(Airbrake)
36
- Bugsnag.notify(exception, data: {payload: data, retries: retries}) if defined?(Bugsnag)
37
40
  rescue Interrupt => exception
38
- success = false
39
41
  logger.error "Interrupt in subscribe block"
40
42
  logger.warn "Stopped gracefully."
41
43
  throw(:terminate)
42
44
  ensure
43
- unless success
45
+ if success
46
+ ack_message(delivery_info.delivery_tag)
47
+ else
44
48
  reject_message(delivery_info.delivery_tag)
45
49
  end
46
50
  end
@@ -80,7 +84,7 @@ module Watership
80
84
 
81
85
  def channel
82
86
  @channel ||= begin
83
- c = connection.create_channel
87
+ c = connection.create_channel(nil, @concurrency)
84
88
  c.prefetch(@prefetch)
85
89
  c
86
90
  end
@@ -1,3 +1,3 @@
1
1
  module Watership
2
- VERSION = '0.5.0'
2
+ VERSION = '0.7.1'
3
3
  end
data/lib/watership.rb CHANGED
@@ -19,7 +19,11 @@ module Watership
19
19
  @config = uri
20
20
  end
21
21
 
22
- def enqueue(options = {})
22
+ def enqueue!(options = {})
23
+ enqueue(options, true)
24
+ end
25
+
26
+ def enqueue(options = {}, reraise = false)
23
27
  options = options.dup
24
28
  message = options.delete(:message)
25
29
  name = options.delete(:name)
@@ -31,6 +35,7 @@ module Watership
31
35
  fallback.call if fallback
32
36
  notify(exception)
33
37
  logger.error(exception.class.name)
38
+ raise exception if reraise
34
39
  end
35
40
 
36
41
  def connect_with_queue(name, options = {})
@@ -38,23 +43,25 @@ module Watership
38
43
  end
39
44
 
40
45
  def reconnect
41
- $channel = nil
46
+ Thread.current[:bunny_channel] = nil
47
+ $bunny_connection = nil
42
48
  channel
43
49
  true
44
50
  end
45
51
 
46
52
  def channel
47
- $channel ||= connection.create_channel
53
+ Thread.current[:bunny_channel] ||= connection.create_channel
48
54
  rescue *CONNECTION_EXCEPTIONS => exception
49
55
  notify(exception)
50
- $channel = nil
56
+ Thread.current[:bunny_channel] = nil
51
57
  end
52
58
 
53
59
  def connection
54
- Bunny.new(@config).tap { |bunny| bunny.start }
60
+ $bunny_connection ||= Bunny.new(@config).tap { |bunny| bunny.start }
55
61
  end
56
62
 
57
63
  def notify(exception)
64
+ Bugsnag.notify(exception) if defined?(Bugsnag) && @env == 'production'
58
65
  Airbrake.notify_or_ignore(exception) if defined?(Airbrake) && @env == 'production'
59
66
  end
60
67
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watership
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Scofield
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-10 00:00:00.000000000 Z
11
+ date: 2014-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler