hutch 0.24.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +18 -13
  3. data/CHANGELOG.md +227 -4
  4. data/Gemfile +3 -3
  5. data/LICENSE +1 -0
  6. data/README.md +94 -94
  7. data/bin/ci/before_build.sh +20 -0
  8. data/bin/ci/install_on_debian.sh +17 -0
  9. data/hutch.gemspec +5 -5
  10. data/lib/hutch.rb +8 -4
  11. data/lib/hutch/broker.rb +37 -10
  12. data/lib/hutch/cli.rb +22 -11
  13. data/lib/hutch/config.rb +12 -0
  14. data/lib/hutch/consumer.rb +32 -2
  15. data/lib/hutch/error_handlers.rb +1 -1
  16. data/lib/hutch/error_handlers/airbrake.rb +20 -2
  17. data/lib/hutch/error_handlers/base.rb +15 -0
  18. data/lib/hutch/error_handlers/honeybadger.rb +28 -14
  19. data/lib/hutch/error_handlers/logger.rb +7 -2
  20. data/lib/hutch/error_handlers/rollbar.rb +28 -0
  21. data/lib/hutch/error_handlers/sentry.rb +9 -2
  22. data/lib/hutch/publisher.rb +1 -1
  23. data/lib/hutch/tracers.rb +0 -1
  24. data/lib/hutch/version.rb +1 -2
  25. data/lib/hutch/waiter.rb +1 -1
  26. data/lib/hutch/worker.rb +30 -1
  27. data/spec/hutch/broker_spec.rb +34 -0
  28. data/spec/hutch/cli_spec.rb +13 -0
  29. data/spec/hutch/consumer_spec.rb +82 -4
  30. data/spec/hutch/error_handlers/airbrake_spec.rb +19 -0
  31. data/spec/hutch/error_handlers/honeybadger_spec.rb +22 -1
  32. data/spec/hutch/error_handlers/logger_spec.rb +11 -0
  33. data/spec/hutch/error_handlers/rollbar_spec.rb +45 -0
  34. data/spec/hutch/error_handlers/sentry_spec.rb +15 -0
  35. data/spec/hutch/waiter_spec.rb +2 -2
  36. data/spec/hutch/worker_spec.rb +1 -1
  37. metadata +22 -17
  38. data/lib/hutch/error_handlers/opbeat.rb +0 -24
  39. data/lib/hutch/tracers/opbeat.rb +0 -37
  40. data/spec/hutch/error_handlers/opbeat_spec.rb +0 -22
  41. data/spec/tracers/opbeat_spec.rb +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: fb197fc767359bc60d35790ec650c9c077120d0d
4
- data.tar.gz: e1152a8d434fdc9a4752c095ad5fdce4871ffd9e
2
+ SHA256:
3
+ metadata.gz: 626b85f02b69ee2113376ff382173fd124cdcae1bdc404f0681874e76a80310e
4
+ data.tar.gz: 3d1d6a2cd275b1c2d72d4842841ad90f70145cabe6800ff3860b206aebf0308e
5
5
  SHA512:
6
- metadata.gz: c34020a830413a6e970bfae9e59fecdaebbe770aaf7df753a7f263af6d7dc98b0ae4433a4aafc27d9d8f45689168d0b39a64d3ba4086c05187fc7b0e352d9814
7
- data.tar.gz: cc24d3e6ab11c4979455c06ba057760b00cffae9dd577a39f4f89bfe7b45a33378c2190362c2d003a5418b3e64238d2997610c8b4f8f52a5287d0765563109ad
6
+ metadata.gz: c1b0c80bf6362b0cfbc6f54b3257c74549c6d927fbae3bcaecb50aeb4ed0f28e01466a6a3013ce9175f55eb481b2e9378f89954edcc1453753da00b76873c766
7
+ data.tar.gz: 4c346421c5c1fa49440866b56486cc75d68c3eed8c3014ae2f51e2643f40a59b084634248b52d32965b65f692d1560250a8f5add30c4b75b2f541c895574aa26
data/.travis.yml CHANGED
@@ -1,19 +1,24 @@
1
+ dist: bionic
2
+ sudo: required
3
+
1
4
  language: ruby
2
5
  cache: bundler
3
6
  before_install:
4
- - gem update --system
5
7
  - gem install bundler
8
+ before_script:
9
+ - "./bin/ci/install_on_debian.sh"
10
+ - until sudo lsof -i:5672; do echo "Waiting for RabbitMQ to start..."; sleep 1; done
11
+ - "./bin/ci/before_build.sh"
6
12
  matrix:
7
13
  include:
8
- - rvm: 2.4.0
9
- - rvm: 2.3.3
10
- - rvm: 2.2
11
- - rvm: 2.1
12
- - rvm: 2.0
13
- - rvm: jruby-9.1.7.0
14
- jdk: oraclejdk8
15
- env:
16
- - JRUBY_OPTS='--debug'
17
-
18
- services:
19
- - rabbitmq
14
+ - rvm: "2.7.1"
15
+ - rvm: "2.6.6"
16
+ - rvm: "2.5.8"
17
+ - rvm: "2.4.10"
18
+ - rvm: "2.3.8"
19
+ - rvm: "jruby-9.2.9.0"
20
+ - rvm: "ruby-head"
21
+ allow_failures:
22
+ rvm:
23
+ - "jruby-9.2.9.0"
24
+ - ruby-head
data/CHANGELOG.md CHANGED
@@ -1,4 +1,228 @@
1
- ## 0.24.0 (unreleased)
1
+ ## 1.0.1 (in development)
2
+
3
+ No changes yet.
4
+
5
+ ## 1.0.0 (April 8th, 2020)
6
+
7
+ Hutch has been around for several years. It is time to ship a 1.0. With it we try to correct
8
+ a few of overly opinionated decisions from recent releases. This means this release
9
+ contains potentially breaking changes.
10
+
11
+ ### Breaking Changes
12
+
13
+ * Hutch will no longer configure any queue type (such as [quorum queues](https://www.rabbitmq.com/quorum-queues.html))
14
+ or queue mode (used by classic [lazy queues](https://www.rabbitmq.com/lazy-queues.html))
15
+ by default as that can be breaking change for existing Hutch and RabbitMQ installations due to the
16
+ [property equivalence requirement](https://www.rabbitmq.com/queues.html#property-equivalence) in AMQP 0-9-1.
17
+
18
+ This means **some defaults introduced in `0.28.0` ([gocardless/hutch#341](https://github.com/gocardless/hutch/pull/341)) were reverted**.
19
+ The user has to opt in to configure the queue type and mode and other [optional arguments](https://www.rabbitmq.com/queues.html#optional-arguments) they need to use.
20
+ Most optional arguments can be set via [policies](https://www.rabbitmq.com/parameters.html#policies) which is always the recommended approach.
21
+ Queue type, unfortunately, is not one of them as different queue types have completely different
22
+ implementation details, on disk data formats and so on.
23
+
24
+ To use a quorum queue, use the `quorum_queue` consumer DSL method:
25
+
26
+ ``` ruby
27
+ class ConsumerUsingQuorumQueue
28
+ include Hutch::Consumer
29
+ consume 'hutch.test1'
30
+ # when in doubt, prefer using a policy to this DSL
31
+ # https://www.rabbitmq.com/parameters.html#policies
32
+ arguments 'x-key': :value
33
+
34
+ quorum_queue
35
+ end
36
+ ```
37
+
38
+ To use a classic lazy queue, use the `lazy_queue` consumer DSL method:
39
+
40
+ ``` ruby
41
+ class ConsumerUsingLazyQueue
42
+ include Hutch::Consumer
43
+ consume 'hutch.test1'
44
+ # when in doubt, prefer using a policy to this DSL
45
+ # https://www.rabbitmq.com/parameters.html#policies
46
+ arguments 'x-key': :value
47
+
48
+ lazy_queue
49
+ classic_queue
50
+ end
51
+ ```
52
+
53
+ By default Hutch will not configure any `x-queue-type` or `x-queue-mode` optional arguments
54
+ which is identical to RabbitMQ defaults (a regular classic queue).
55
+
56
+ Note that as of RabbitMQ 3.8.2, an omitted `x-queue-type` is [considered to be identical](https://github.com/rabbitmq/rabbitmq-common/issues/341)
57
+ to `x-queue-type` set to `classic` by RabbitMQ server.
58
+
59
+
60
+ #### Enhancements
61
+
62
+ * Exchange type is now configurable via the `` config setting. Supported exchanges must be
63
+ compatible with topic exchanges (e.g. wrap it). Default value is `"topic"`.
64
+
65
+ This feature is limited to topic and delayed message exchange plugins and is mostly
66
+ useful for forward compatibility.
67
+
68
+ Contributed by Michael Bumann.
69
+
70
+ GitHub issue: [gocardless/hutch#349](https://github.com/gocardless/hutch/pull/349)
71
+
72
+
73
+ ## 0.28.0 (March 17, 2020)
74
+
75
+ ### Enhancements
76
+
77
+ * Add lazy and quorum options for queues.
78
+
79
+ GitHub issue: [gocardless/hutch#341](https://github.com/gocardless/hutch/pull/341)
80
+
81
+ Contributed by: Arthur Del Esposte
82
+
83
+ * Log level in the message publisher switched to DEBUG.
84
+
85
+ GitHub issue: [gocardless/hutch#343](https://github.com/gocardless/hutch/pull/343)
86
+
87
+ Contributed by: Codruț Constantin Gușoi
88
+
89
+ ### Documentation
90
+
91
+ * Add zeitwerk note to README.
92
+
93
+ GitHub issue: [gocardless/hutch#342](https://github.com/gocardless/hutch/pull/342)
94
+
95
+ Contributed by: Paolo Zaccagnini
96
+
97
+ ### CI
98
+
99
+ * Use jruby-9.2.9.0
100
+
101
+ GitHub issue: [gocardless/hutch#336](https://github.com/gocardless/hutch/pull/336)
102
+
103
+ Contributed by: Olle Jonsson
104
+
105
+ ## 0.27.0 (September 9th, 2019)
106
+
107
+ ### Enhancements
108
+
109
+ * Error handler for Rollback.
110
+
111
+ GitHub issue: [gocardless/hutch#332](https://github.com/gocardless/hutch/pull/332)
112
+
113
+ Contributed by Johan Kok.
114
+
115
+ ### Bug Fixes
116
+
117
+ * Allow for the latest ActiveSupport version.
118
+
119
+ GitHub issue: [gocardless/hutch#334](https://github.com/gocardless/hutch/pull/334)
120
+
121
+ * Signal tests are now skipped on JRuby.
122
+
123
+ Contributed by Olle Jonsson.
124
+
125
+ GitHub issue: [gocardless/hutch#326](https://github.com/gocardless/hutch/pull/326)
126
+
127
+ ### Dependency Bumps
128
+
129
+ Bunny and other dependencies were updated to their latest release
130
+ series.
131
+
132
+
133
+ ## 0.26.0 (February 13th, 2019)
134
+
135
+ ### Dependency Bumps
136
+
137
+ Bunny and other dependencies were updated to their latest release
138
+ series.
139
+
140
+ ### Synchronized Connection Code
141
+
142
+ The methods that connect to RabbitMQ are now synchronized which makes
143
+ them safer to use in concurrent settings. Note that Hutch still
144
+ uses a single Bunny channel which is not meant to be shared
145
+ between threads without application-level synchronization for publishing.
146
+
147
+ Contributed by Chris Barton.
148
+
149
+ GitHub issue: [#308](https://github.com/gocardless/hutch/pull/308).
150
+
151
+ ### More Bunny Options Propagated
152
+
153
+ Contributed by Damian Le Nouaille.
154
+
155
+ GitHub issue: [#322](https://github.com/gocardless/hutch/pull/322).
156
+
157
+ ### Removed Opbeat Integration
158
+
159
+ The service is no longer generally available.
160
+
161
+ Contributed by Olle Jonsson.
162
+
163
+ GitHub issue: [#313](https://github.com/gocardless/hutch/pull/313)
164
+
165
+
166
+ ## 0.25.0 - January 17th, 2018
167
+
168
+ ### Consumer groups
169
+
170
+ Consumer groups allow you to run groups of consumers together, rather than running them
171
+ all at once in a single process. You define groups in your config file, and then specify
172
+ a `--only-group` option when starting up Hutch with `hutch`.
173
+
174
+ Contributed by Nickolai Smirnov.
175
+
176
+ GitHub pull request: [#296](https://github.com/gocardless/hutch/pull/296)
177
+
178
+ ### Fix configuring Hutch with a URI
179
+
180
+ When Hutch is configured to connect to RabbitMQ with a URI, we should respect the
181
+ `amqps` specification, defaulting to the standard protocol ports when not specified.
182
+
183
+ This means, for example, that `amqp://guest:guest@127.0.0.1/` connects to the server on
184
+ port 5672 and does not use TLS, whereas `amqps://guest:guest@127.0.0.1/` connects to the
185
+ server on port 5671 and uses TLS.
186
+
187
+ This behaviour was introduced in [#159](https://github.com/gocardless/hutch/pull/159) but
188
+ broken since then. This fixes it, and includes tests.
189
+
190
+ Contributed by Michael Canden-Lennox.
191
+
192
+ GitHub pull request: [#305](https://github.com/gocardless/hutch/pull/305)
193
+
194
+ ### Pass exceptions when setting up the client to configured error handlers
195
+
196
+ When an error occurs during Hutch's startup, it is currently not passed to the configured
197
+ error handlers. This starts handling those exceptions.
198
+
199
+ Contributed by Valentin Krasontovitsch.
200
+
201
+ GitHub issue: [#288](https://github.com/gocardless/hutch/issues/288)
202
+ GitHub pull request: [#301](https://github.com/gocardless/hutch/pull/301)
203
+
204
+ ### Log the Rails environment when running Hutch in verbose mode
205
+
206
+ When starting up Hutch in verbose mode with `hutch -v`, the Rails environment is now
207
+ logged.
208
+
209
+ Contributed by [@wppurking](https://github.com/wppurking).
210
+
211
+ GitHub pull request: [#282](https://github.com/gocardless/hutch/pull/282)
212
+
213
+ ### Make the Honeybadger error handler compatible with new versions of `honeybadger-ruby`
214
+
215
+ [`honeybadger-ruby`](https://github.com/honeybadger-io/honeybadger-ruby/)
216
+ [changed](https://github.com/honeybadger-io/honeybadger-ruby/blob/master/CHANGELOG.md#300---2017-02-06)
217
+ its API in v3.0.0. This updates our error handler to work with that, whilst still
218
+ maintaining our existing behaviour.
219
+
220
+ Contributed by Olle Jonsson and Bill Ruddock.
221
+
222
+ GitHub pull requests: [#274](https://github.com/gocardless/hutch/pull/274),
223
+ [#290](https://github.com/gocardless/hutch/pull/290)
224
+
225
+ ## 0.24.0 — February 1st, 2017
2
226
 
3
227
  ### Configurable Consumer Prefixes
4
228
 
@@ -14,7 +238,7 @@ Hutch will now handle several OS signals:
14
238
 
15
239
  * `USR2` will log stack traces of all alive VM threads
16
240
  * `QUIT` (except on JRuby), `INT`, `TERM` will cause Hutch daemon to shut down
17
-
241
+
18
242
  Contributed by Olle Jonsson.
19
243
 
20
244
  GitHub issues: [#263](https://github.com/gocardless/hutch/pull/263), [#271](https://github.com/gocardless/hutch/pull/271)
@@ -98,7 +322,7 @@ Contributed by Seamus Abshere.
98
322
 
99
323
  ### Worker: Log received messages using level DEBUG instead of INFO
100
324
 
101
- Received messages used to be logged using severity level INFO.
325
+ Received messages used to be logged using severity level INFO.
102
326
  This has been lowered to DEBUG.
103
327
 
104
328
  Contributed by Jesper Josefsson.
@@ -630,4 +854,3 @@ Hutch.global_properties = proc {
630
854
  ## 0.1.0 - September 9, 2013
631
855
 
632
856
  - Initial release
633
-
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- ruby RUBY_VERSION
3
+ ruby '>= 2.3.0'
4
4
 
5
5
  gemspec
6
6
 
@@ -23,8 +23,8 @@ group :development, :test do
23
23
  gem "honeybadger"
24
24
  gem "coveralls", "~> 0.8.15", require: false
25
25
  gem "newrelic_rpm"
26
- gem "airbrake", "~> 5.0"
27
- gem "opbeat", "~> 3.0.9"
26
+ gem "airbrake", "~> 10.0"
27
+ gem "rollbar"
28
28
  end
29
29
 
30
30
  group :development, :darwin do
data/LICENSE CHANGED
@@ -1,4 +1,5 @@
1
1
  Copyright (c) 2013-2016 GoCardless
2
+ Copyright (c) 2016-2020 Hutch contributors
2
3
 
3
4
  Permission is hereby granted, free of charge, to any person
4
5
  obtaining a copy of this software and associated documentation
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/hutch.svg)](http://badge.fury.io/rb/hutch)
4
4
  [![Build Status](https://travis-ci.org/gocardless/hutch.svg?branch=master)](https://travis-ci.org/gocardless/hutch)
5
- [![Dependency Status](https://gemnasium.com/gocardless/hutch.svg)](https://gemnasium.com/gocardless/hutch)
6
5
  [![Code Climate](https://codeclimate.com/github/gocardless/hutch.svg)](https://codeclimate.com/github/gocardless/hutch)
7
6
 
8
7
  Hutch is a Ruby library for enabling asynchronous inter-service communication
@@ -40,7 +39,7 @@ gem install hutch
40
39
 
41
40
  ## Requirements
42
41
 
43
- - Hutch requires Ruby 2.0+ or JRuby 9K.
42
+ - Hutch requires Ruby 2.3+ or JRuby 9K.
44
43
  - Hutch requires RabbitMQ 3.3 or later.
45
44
 
46
45
  ## Overview
@@ -59,8 +58,9 @@ Hutch uses [Bunny](http://rubybunny.info) or [March Hare](http://rubymarchhare.i
59
58
 
60
59
  ### Project Maturity
61
60
 
62
- Hutch is a moderately mature project (started in early 2013)
63
- that was extracted from production systems.
61
+ Hutch is a mature project that was originally extracted from production systems
62
+ at [GoCardless](https://gocardless.com) in 2013 and is now maintained by a large
63
+ group of contributors.
64
64
 
65
65
  ## Consumers
66
66
 
@@ -80,8 +80,8 @@ message[:id] # => "02ABCXYZ"
80
80
  To subscribe to a topic, pass a routing key to `consume` in the class
81
81
  definition. To bind to multiple routing keys, simply pass extra routing keys
82
82
  in as additional arguments. Refer to the [RabbitMQ docs on topic exchanges
83
- ][topic-docs] for more information about how to use routing keys. Here's an
84
- example consumer:
83
+ ](http://www.rabbitmq.com/tutorials/tutorial-five-ruby.html) for more information
84
+ about how to use routing keys. Here's an example consumer:
85
85
 
86
86
  ```ruby
87
87
  class FailedPaymentConsumer
@@ -109,6 +109,28 @@ class FailedPaymentConsumer
109
109
  end
110
110
  ```
111
111
 
112
+ It is possible to set some custom options to consumer's queue explicitly.
113
+ This example sets the consumer's queue as a
114
+ [quorum queue](https://www.rabbitmq.com/quorum-queues.html)
115
+ and to operate in the [lazy mode](https://www.rabbitmq.com/lazy-queues.html).
116
+ The `initial_group_size`
117
+ [argument](https://www.rabbitmq.com/quorum-queues.html#replication-factor) is
118
+ optional.
119
+
120
+ ```ruby
121
+ class FailedPaymentConsumer
122
+ include Hutch::Consumer
123
+ consume 'gc.ps.payment.failed'
124
+ queue_name 'failed_payments'
125
+ lazy_queue
126
+ quorum_queue initial_group_size: 3
127
+
128
+ def process(message)
129
+ mark_payment_as_failed(message[:id])
130
+ end
131
+ end
132
+ ```
133
+
112
134
  You can also set custom arguments per consumer. This example declares a consumer with
113
135
  a maximum length of 10 messages:
114
136
 
@@ -120,7 +142,9 @@ class FailedPaymentConsumer
120
142
  end
121
143
  ```
122
144
 
123
- Custom queue arguments can be found on [this page](https://www.rabbitmq.com/extensions.html).
145
+ This sets the `x-max-length` header. For more details, see the [RabbitMQ
146
+ documentation on Queue Length Limit](https://www.rabbitmq.com/maxlength.html). To find out more
147
+ about custom queue arguments, consult the [RabbitMQ documentation on AMQP Protocol Extensions](https://www.rabbitmq.com/extensions.html).
124
148
 
125
149
  Consumers can write to Hutch's log by calling the logger method. The logger method returns
126
150
  a [Logger object](http://ruby-doc.org/stdlib-2.1.2/libdoc/logger/rdoc/Logger.html).
@@ -164,7 +188,7 @@ This will enable NewRelic custom instrumentation:
164
188
  Hutch::Config.set(:tracer, Hutch::Tracers::NewRelic)
165
189
  ```
166
190
 
167
- Batteries included!
191
+ Batteries included!
168
192
 
169
193
  ## Running Hutch
170
194
 
@@ -217,6 +241,24 @@ directory of a Rails app, or pass the path to a Rails app in with the
217
241
  the `app/consumers/` directory, to allow them to be auto-loaded when Rails
218
242
  boots.
219
243
 
244
+ If you're using the new Zeitwerk autoloader (enabled by default in Rails 6)
245
+ and the consumers are not loaded in development environment you will need to
246
+ trigger the autoloading in an initializer with
247
+
248
+ ```ruby
249
+ ::Zeitwerk::Loader.eager_load_all
250
+ ```
251
+
252
+ or with something more specific like
253
+
254
+ ```ruby
255
+ autoloader = Rails.autoloaders.main
256
+
257
+ Dir.glob(File.join('app/consumers', '*_consumer.rb')).each do |consumer|
258
+ autoloader.preload(consumer)
259
+ end
260
+ ```
261
+
220
262
  To require files that define consumers manually, simply pass each file as an
221
263
  option to `--require`. Hutch will automatically detect whether you've provided
222
264
  a Rails app or a standard file, and take the appropriate behaviour:
@@ -300,8 +342,8 @@ AMQP.connect(host: config[:host]) do |connection|
300
342
  end
301
343
  ```
302
344
 
303
- If using publisher confirms with amqp gem, see [this issue][pc-issue]
304
- and [this gist][pc-gist] for more info.
345
+ If using publisher confirms with amqp gem, see [this issue](https://github.com/ruby-amqp/amqp/issues/92)
346
+ and [this gist](https://gist.github.com/3042381) for more info.
305
347
 
306
348
  ## Configuration
307
349
 
@@ -339,6 +381,8 @@ Known configuration parameters are:
339
381
  * `connection_timeout`: Bunny's socket open timeout (default: `11`)
340
382
  * `read_timeout`: Bunny's socket read timeout (default: `11`)
341
383
  * `write_timeout`: Bunny's socket write timeout (default: `11`)
384
+ * `automatically_recover`: Bunny's enable/disable network recovery (default: `true`)
385
+ * `network_recovery_interval`: Bunny's reconnect interval (default: `1`)
342
386
  * `tracer`: tracer to use to track message processing
343
387
 
344
388
  ### Environment variables
@@ -384,245 +428,201 @@ Generate with
384
428
  </tr>
385
429
  </thead>
386
430
  <tbody>
387
-
388
431
  <tr>
389
432
  <td><tt>mq_host</tt></td>
390
433
  <td>127.0.0.1</td>
391
434
  <td>String</td>
392
435
  <td><tt>HUTCH_MQ_HOST</tt></td>
393
- <td><p>RabbitMQ hostname</p>
394
- </td>
436
+ <td><p>RabbitMQ hostname</p></td>
395
437
  </tr>
396
-
397
438
  <tr>
398
439
  <td><tt>mq_exchange</tt></td>
399
440
  <td>hutch</td>
400
441
  <td>String</td>
401
442
  <td><tt>HUTCH_MQ_EXCHANGE</tt></td>
402
- <td><p>RabbitMQ Exchange to use for publishing</p>
403
- </td>
443
+ <td><p>RabbitMQ Exchange to use for publishing</p></td>
404
444
  </tr>
405
-
406
445
  <tr>
407
446
  <td><tt>mq_vhost</tt></td>
408
447
  <td>/</td>
409
448
  <td>String</td>
410
449
  <td><tt>HUTCH_MQ_VHOST</tt></td>
411
- <td><p>RabbitMQ vhost to use</p>
412
- </td>
450
+ <td><p>RabbitMQ vhost to use</p></td>
413
451
  </tr>
414
-
415
452
  <tr>
416
453
  <td><tt>mq_username</tt></td>
417
454
  <td>guest</td>
418
455
  <td>String</td>
419
456
  <td><tt>HUTCH_MQ_USERNAME</tt></td>
420
- <td><p>RabbitMQ username to use.</p>
421
- </td>
457
+ <td><p>RabbitMQ username to use.</p></td>
422
458
  </tr>
423
-
424
459
  <tr>
425
460
  <td><tt>mq_password</tt></td>
426
461
  <td>guest</td>
427
462
  <td>String</td>
428
463
  <td><tt>HUTCH_MQ_PASSWORD</tt></td>
429
- <td><p>RabbitMQ password</p>
430
- </td>
464
+ <td><p>RabbitMQ password</p></td>
431
465
  </tr>
432
-
433
466
  <tr>
434
467
  <td><tt>uri</tt></td>
435
468
  <td>nil</td>
436
469
  <td>String</td>
437
470
  <td><tt>HUTCH_URI</tt></td>
438
- <td><p>RabbitMQ URI (takes precedence over MQ username, password, host, port and vhost settings)</p>
439
- </td>
471
+ <td><p>RabbitMQ URI (takes precedence over MQ username, password, host, port and vhost settings)</p></td>
440
472
  </tr>
441
-
442
473
  <tr>
443
474
  <td><tt>mq_api_host</tt></td>
444
475
  <td>127.0.0.1</td>
445
476
  <td>String</td>
446
477
  <td><tt>HUTCH_MQ_API_HOST</tt></td>
447
- <td><p>RabbitMQ HTTP API hostname</p>
448
- </td>
478
+ <td><p>RabbitMQ HTTP API hostname</p></td>
449
479
  </tr>
450
-
451
480
  <tr>
452
481
  <td><tt>mq_port</tt></td>
453
482
  <td>5672</td>
454
483
  <td>Number</td>
455
484
  <td><tt>HUTCH_MQ_PORT</tt></td>
456
- <td><p>RabbitMQ port</p>
457
- </td>
485
+ <td><p>RabbitMQ port</p></td>
458
486
  </tr>
459
-
460
487
  <tr>
461
488
  <td><tt>mq_api_port</tt></td>
462
489
  <td>15672</td>
463
490
  <td>Number</td>
464
491
  <td><tt>HUTCH_MQ_API_PORT</tt></td>
465
- <td><p>RabbitMQ HTTP API port</p>
466
- </td>
492
+ <td><p>RabbitMQ HTTP API port</p></td>
467
493
  </tr>
468
-
469
494
  <tr>
470
495
  <td><tt>heartbeat</tt></td>
471
496
  <td>30</td>
472
497
  <td>Number</td>
473
498
  <td><tt>HUTCH_HEARTBEAT</tt></td>
474
- <td><p><a href="http://rabbitmq.com/heartbeats.html">RabbitMQ heartbeat timeout</a></p>
475
- </td>
499
+ <td><p><a href="http://rabbitmq.com/heartbeats.html">RabbitMQ heartbeat timeout</a></p></td>
476
500
  </tr>
477
-
478
501
  <tr>
479
502
  <td><tt>channel_prefetch</tt></td>
480
503
  <td>0</td>
481
504
  <td>Number</td>
482
505
  <td><tt>HUTCH_CHANNEL_PREFETCH</tt></td>
483
- <td><p>The <tt>basic.qos</tt> prefetch value to use.</p>
484
- </td>
506
+ <td><p>The <tt>basic.qos</tt> prefetch value to use.</p></td>
485
507
  </tr>
486
-
487
508
  <tr>
488
509
  <td><tt>connection_timeout</tt></td>
489
510
  <td>11</td>
490
511
  <td>Number</td>
491
512
  <td><tt>HUTCH_CONNECTION_TIMEOUT</tt></td>
492
- <td><p>Bunny's socket open timeout</p>
493
- </td>
513
+ <td><p>Bunny's socket open timeout</p></td>
494
514
  </tr>
495
-
496
515
  <tr>
497
516
  <td><tt>read_timeout</tt></td>
498
517
  <td>11</td>
499
518
  <td>Number</td>
500
519
  <td><tt>HUTCH_READ_TIMEOUT</tt></td>
501
- <td><p>Bunny's socket read timeout</p>
502
- </td>
520
+ <td><p>Bunny's socket read timeout</p></td>
503
521
  </tr>
504
-
505
522
  <tr>
506
523
  <td><tt>write_timeout</tt></td>
507
524
  <td>11</td>
508
525
  <td>Number</td>
509
526
  <td><tt>HUTCH_WRITE_TIMEOUT</tt></td>
510
- <td><p>Bunny's socket write timeout</p>
511
- </td>
527
+ <td><p>Bunny's socket write timeout</p></td>
528
+ </tr>
529
+ <tr>
530
+ <td><tt>automatically_recover</tt></td>
531
+ <td>true</td>
532
+ <td>Boolean</td>
533
+ <td><tt>HUTCH_AUTOMATICALLY_RECOVER</tt></td>
534
+ <td><p>Bunny's enable/disable network recovery</p></td>
535
+ </tr>
536
+ <tr>
537
+ <td><tt>network_recovery_interval</tt></td>
538
+ <td>1</td>
539
+ <td>Number</td>
540
+ <td><tt>HUTCH_NETWORK_RECOVERY_INTERVAL</tt></td>
541
+ <td><p>Bunny's reconnect interval</p></td>
512
542
  </tr>
513
-
514
543
  <tr>
515
544
  <td><tt>graceful_exit_timeout</tt></td>
516
545
  <td>11</td>
517
546
  <td>Number</td>
518
547
  <td><tt>HUTCH_GRACEFUL_EXIT_TIMEOUT</tt></td>
519
- <td><p>FIXME: DOCUMENT THIS</p>
520
- </td>
548
+ <td><p>FIXME: DOCUMENT THIS</p></td>
521
549
  </tr>
522
-
523
550
  <tr>
524
551
  <td><tt>consumer_pool_size</tt></td>
525
552
  <td>1</td>
526
553
  <td>Number</td>
527
554
  <td><tt>HUTCH_CONSUMER_POOL_SIZE</tt></td>
528
- <td><p>Bunny consumer work pool size</p>
529
- </td>
555
+ <td><p>Bunny consumer work pool size</p></td>
530
556
  </tr>
531
-
532
557
  <tr>
533
558
  <td><tt>mq_tls</tt></td>
534
559
  <td>false</td>
535
560
  <td>Boolean</td>
536
561
  <td><tt>HUTCH_MQ_TLS</tt></td>
537
- <td><p>Should TLS be used?</p>
538
- </td>
562
+ <td><p>Should TLS be used?</p></td>
539
563
  </tr>
540
-
541
564
  <tr>
542
565
  <td><tt>mq_verify_peer</tt></td>
543
566
  <td>true</td>
544
567
  <td>Boolean</td>
545
568
  <td><tt>HUTCH_MQ_VERIFY_PEER</tt></td>
546
- <td><p>Should SSL certificate be verified?</p>
547
- </td>
569
+ <td><p>Should SSL certificate be verified?</p></td>
548
570
  </tr>
549
-
550
571
  <tr>
551
572
  <td><tt>mq_api_ssl</tt></td>
552
573
  <td>false</td>
553
574
  <td>Boolean</td>
554
575
  <td><tt>HUTCH_MQ_API_SSL</tt></td>
555
- <td><p>Should SSL be used for the RabbitMQ API?</p>
556
- </td>
576
+ <td><p>Should SSL be used for the RabbitMQ API?</p></td>
557
577
  </tr>
558
-
559
578
  <tr>
560
579
  <td><tt>autoload_rails</tt></td>
561
580
  <td>true</td>
562
581
  <td>Boolean</td>
563
582
  <td><tt>HUTCH_AUTOLOAD_RAILS</tt></td>
564
- <td><p>Should the current Rails app directory be required?</p>
565
- </td>
583
+ <td><p>Should the current Rails app directory be required?</p></td>
566
584
  </tr>
567
-
568
585
  <tr>
569
586
  <td><tt>daemonise</tt></td>
570
587
  <td>false</td>
571
588
  <td>Boolean</td>
572
589
  <td><tt>HUTCH_DAEMONISE</tt></td>
573
- <td><p>Should the Hutch runner process daemonise?</p>
574
- </td>
590
+ <td><p>Should the Hutch runner process daemonise?</p></td>
575
591
  </tr>
576
-
577
592
  <tr>
578
593
  <td><tt>publisher_confirms</tt></td>
579
594
  <td>false</td>
580
595
  <td>Boolean</td>
581
596
  <td><tt>HUTCH_PUBLISHER_CONFIRMS</tt></td>
582
- <td><p>Should RabbitMQ publisher confirms be enabled?</p>
583
- </td>
597
+ <td><p>Should RabbitMQ publisher confirms be enabled?</p></td>
584
598
  </tr>
585
-
586
599
  <tr>
587
600
  <td><tt>force_publisher_confirms</tt></td>
588
601
  <td>false</td>
589
602
  <td>Boolean</td>
590
603
  <td><tt>HUTCH_FORCE_PUBLISHER_CONFIRMS</tt></td>
591
- <td><p>Enables publisher confirms, forces Hutch::Broker#wait_for_confirms for</p>
592
- </td>
604
+ <td><p>Enables publisher confirms, forces Hutch::Broker#wait_for_confirms for</p></td>
593
605
  </tr>
594
-
595
606
  <tr>
596
607
  <td><tt>enable_http_api_use</tt></td>
597
608
  <td>true</td>
598
609
  <td>Boolean</td>
599
610
  <td><tt>HUTCH_ENABLE_HTTP_API_USE</tt></td>
600
- <td><p>Should the RabbitMQ HTTP API be used?</p>
601
- </td>
611
+ <td><p>Should the RabbitMQ HTTP API be used?</p></td>
602
612
  </tr>
603
-
604
613
  <tr>
605
614
  <td><tt>consumer_pool_abort_on_exception</tt></td>
606
615
  <td>false</td>
607
616
  <td>Boolean</td>
608
617
  <td><tt>HUTCH_CONSUMER_POOL_ABORT_ON_EXCEPTION</tt></td>
609
- <td><p>Should Bunny's consumer work pool threads abort on exception.</p>
610
- </td>
618
+ <td><p>Should Bunny's consumer work pool threads abort on exception.</p></td>
611
619
  </tr>
612
-
613
620
  <tr>
614
621
  <td><tt>consumer_tag_prefix</tt></td>
615
622
  <td>hutch</td>
616
623
  <td>String</td>
617
624
  <td><tt>HUTCH_CONSUMER_TAG_PREFIX</tt></td>
618
- <td><p>Prefix displayed on the consumers tags.</p>
619
- </td>
625
+ <td><p>Prefix displayed on the consumers tags.</p></td>
620
626
  </tr>
621
-
622
627
  </tbody>
623
628
  </table>
624
-
625
-
626
- ---
627
-
628
- GoCardless ♥ open source. If you do too, come [join us](https://gocardless.com/jobs/backend_developer).