isimud 1.3.9 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.yardoc/checksums +0 -15
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +17 -13
- data/LICENSE.txt +1 -1
- data/README.md +98 -62
- data/Rakefile +1 -1
- data/checksum/isimud-1.4.0.gem.sha512 +1 -0
- data/doc/Isimud.html +118 -138
- data/doc/Isimud/BunnyClient.html +2 -2
- data/doc/Isimud/Client.html +2 -2
- data/doc/Isimud/Event.html +2 -2
- data/doc/Isimud/EventListener.html +208 -88
- data/doc/Isimud/EventObserver.html +96 -31
- data/doc/Isimud/EventObserver/ClassMethods.html +14 -14
- data/doc/Isimud/Generators.html +2 -2
- data/doc/Isimud/Logging.html +2 -2
- data/doc/Isimud/ModelWatcher.html +2 -2
- data/doc/Isimud/ModelWatcher/ClassMethods.html +2 -2
- data/doc/Isimud/Railtie.html +2 -2
- data/doc/Isimud/TestClient.html +2 -2
- data/doc/Isimud/TestClient/Queue.html +74 -2
- data/doc/_index.html +2 -195
- data/doc/class_list.html +1 -1
- data/doc/file.LICENSE.html +3 -3
- data/doc/file.README.html +157 -65
- data/doc/index.html +157 -65
- data/doc/method_list.html +0 -732
- data/doc/top-level-namespace.html +2 -12
- data/lib/isimud.rb +22 -17
- data/lib/isimud/bunny_client.rb +12 -10
- data/lib/isimud/client.rb +10 -1
- data/lib/isimud/event_listener.rb +6 -6
- data/lib/isimud/test_client.rb +12 -12
- data/lib/isimud/version.rb +1 -1
- data/release +1 -1
- data/spec/isimud/bunny_client_spec.rb +28 -27
- data/spec/isimud/client_spec.rb +50 -5
- metadata +3 -4
- metadata.gz.sig +0 -0
- data/doc/Isimud/Generators/ConfigGenerator.html +0 -192
- data/doc/Isimud/Generators/InitializerGenerator.html +0 -192
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e44d23a18cf13265519e1f9141b7548ef1a3974
|
4
|
+
data.tar.gz: 11817dccd7145d8b56596836cbb214d2801cf549
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 718764a123733b2e68180f965a33aa49e5d9d5e6ac7debb7c7914b3ef406ba75aa62a9acf3c7bb54840249992a291add6c2252b755b7e2f82c8d33d26ef69a22
|
7
|
+
data.tar.gz: c78ec602bf966b51015cb611d647ff793afa2a2ff162e11dcd0fcb4f660b6c3f63dc127f724c8948dc346f6052dac7ad6a7543feba07c7ffa349b8335b4762d3
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/.yardoc/checksums
CHANGED
@@ -1,15 +0,0 @@
|
|
1
|
-
lib/isimud.rb 5a9fee170ff924c6347d98fb5a80980d5f0ecc9a
|
2
|
-
lib/isimud/event.rb f29a804bfa084e68329825b5fb9863d268f3ff27
|
3
|
-
lib/isimud/tasks.rb 8d07d80e178928098e959ebdcbda1707e9b50617
|
4
|
-
lib/isimud/client.rb 88ffac5ff4cc3306d0f1c9f9a1ca9d5c344e81cf
|
5
|
-
lib/isimud/version.rb 3c726b1fa933bfa72e64a8c111f741f10a0a8220
|
6
|
-
lib/isimud/logging.rb 2f506f049011441628a3d573d8e2a670156b4a3a
|
7
|
-
lib/isimud/railtie.rb e644c4d74ae8298f11dd0c2fcae1d72259e24ea3
|
8
|
-
lib/isimud/test_client.rb e70e3b96b7cec013f8edcb4005ea72ea8acc48c7
|
9
|
-
lib/isimud/bunny_client.rb 7009922019087e2c9920073cb79c93aba8446dc4
|
10
|
-
lib/isimud/model_watcher.rb f6694603386e538f755ff7217f975f04c9529c26
|
11
|
-
lib/isimud/event_observer.rb 64c3af1d81df6a97cf9700eb71dc4d241f5b0044
|
12
|
-
lib/isimud/event_listener.rb e7fea6bb36d76bc50c28c32869653d0558a3e7f7
|
13
|
-
lib/rails/generators/isimud/config_generator.rb d1c964f26c6e0f0289343bac17d3a9b1f99d7a98
|
14
|
-
lib/rails/generators/isimud/initializer_generator.rb c7b188459d17d35ccbfa820a434dd6a97a58aeeb
|
15
|
-
lib/rails/generators/isimud/templates/initializer.rb 6b937955296d704bfa4a06eec91ce14a6dd954ba
|
data/.yardoc/object_types
CHANGED
Binary file
|
data/.yardoc/objects/root.dat
CHANGED
Binary file
|
data/Gemfile
CHANGED
@@ -11,11 +11,11 @@ gem 'yard'
|
|
11
11
|
|
12
12
|
group :development, :test do
|
13
13
|
gem 'awesome_print'
|
14
|
-
gem 'rspec'
|
14
|
+
gem 'rspec-rails'
|
15
15
|
gem 'combustion'
|
16
16
|
gem 'database_cleaner'
|
17
17
|
gem 'sqlite3'
|
18
|
-
gem 'codeclimate-test-reporter', require:
|
18
|
+
gem 'codeclimate-test-reporter', require: nil
|
19
19
|
end
|
20
20
|
|
21
21
|
group :test do
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
isimud (1.
|
4
|
+
isimud (1.4.0)
|
5
5
|
activerecord (>= 4.1.4)
|
6
6
|
activesupport (>= 4.1.4)
|
7
7
|
bunny (>= 1.6.0)
|
@@ -64,19 +64,23 @@ GEM
|
|
64
64
|
rake (>= 0.8.7)
|
65
65
|
thor (>= 0.18.1, < 2.0)
|
66
66
|
rake (10.4.2)
|
67
|
-
rspec (3.
|
68
|
-
rspec-
|
69
|
-
|
70
|
-
rspec-mocks (~> 3.3.0)
|
71
|
-
rspec-core (3.3.2)
|
72
|
-
rspec-support (~> 3.3.0)
|
73
|
-
rspec-expectations (3.3.1)
|
67
|
+
rspec-core (3.5.1)
|
68
|
+
rspec-support (~> 3.5.0)
|
69
|
+
rspec-expectations (3.5.0)
|
74
70
|
diff-lcs (>= 1.2.0, < 2.0)
|
75
|
-
rspec-support (~> 3.
|
76
|
-
rspec-mocks (3.
|
71
|
+
rspec-support (~> 3.5.0)
|
72
|
+
rspec-mocks (3.5.0)
|
77
73
|
diff-lcs (>= 1.2.0, < 2.0)
|
78
|
-
rspec-support (~> 3.
|
79
|
-
rspec-
|
74
|
+
rspec-support (~> 3.5.0)
|
75
|
+
rspec-rails (3.5.1)
|
76
|
+
actionpack (>= 3.0)
|
77
|
+
activesupport (>= 3.0)
|
78
|
+
railties (>= 3.0)
|
79
|
+
rspec-core (~> 3.5.0)
|
80
|
+
rspec-expectations (~> 3.5.0)
|
81
|
+
rspec-mocks (~> 3.5.0)
|
82
|
+
rspec-support (~> 3.5.0)
|
83
|
+
rspec-support (3.5.0)
|
80
84
|
simplecov (0.10.0)
|
81
85
|
docile (~> 1.1.0)
|
82
86
|
json (~> 1.8)
|
@@ -105,7 +109,7 @@ DEPENDENCIES
|
|
105
109
|
database_cleaner
|
106
110
|
isimud!
|
107
111
|
rake
|
108
|
-
rspec
|
112
|
+
rspec-rails
|
109
113
|
sqlite3
|
110
114
|
test_after_commit
|
111
115
|
timecop
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Isimud is an AMQP message publishing and consumption gem intended for Rails appl
|
|
15
15
|
* An Event Listener daemon process which manages queues and dispatches messages for Event Observers.
|
16
16
|
* A test client for mocking message publication, allowing synchronous delivery and processing of messages in unit tests.
|
17
17
|
|
18
|
-
|
18
|
+
# Installation
|
19
19
|
|
20
20
|
Add this line to your application's Gemfile:
|
21
21
|
|
@@ -36,17 +36,17 @@ For Rails applications, use the following generators to create config and initia
|
|
36
36
|
|
37
37
|
Customize the AMQP broker settings in the config/isimud.yml
|
38
38
|
|
39
|
-
|
39
|
+
# Usage
|
40
40
|
|
41
|
-
|
41
|
+
## Connecting to an AMQP Server
|
42
42
|
|
43
43
|
There are two supported conventions for specifying a RabbitMQ server (broker) in the configuration file:
|
44
44
|
|
45
|
-
|
45
|
+
### Using a URL
|
46
46
|
|
47
47
|
server: amqp:port//user_name:password@host/vhost
|
48
48
|
|
49
|
-
|
49
|
+
### Using Separate Parameters:
|
50
50
|
|
51
51
|
server:
|
52
52
|
host: hostname
|
@@ -67,57 +67,98 @@ in order to prevent loss of messages due to failures.
|
|
67
67
|
|
68
68
|
Isimud uses [Bunny](http://rubybunny.info) to connect to RabbitMQ.
|
69
69
|
|
70
|
-
|
70
|
+
## Message Publication
|
71
71
|
|
72
|
-
Isimud
|
73
|
-
|
72
|
+
Isimud publish messages to topic based exchanges. Each message is tagged with a routing key, allowing for multiple
|
73
|
+
audiences to selectively receive messages.
|
74
74
|
|
75
|
-
|
75
|
+
## Message Queues, Bindings, and Consumption
|
76
76
|
|
77
|
-
Isimud uses non-exclusive, durable queues to
|
78
|
-
if they do not exist.
|
77
|
+
Isimud uses named, non-exclusive, durable queues to consume messages, with a configurable pre-fetch amount.
|
79
78
|
|
80
|
-
|
79
|
+
There are two ways that message queues may be declared:
|
81
80
|
|
82
|
-
|
81
|
+
1. Using EventObserver instances. The EventObserver module allows an implementing class to define queues and bindings
|
82
|
+
for each instance.
|
83
|
+
* The EventListener automatically establishes and manages queues for instances of each implementing class.
|
84
|
+
* Each EventListener process maintains its own exclusive queue to automatically add or cancel consumers for
|
85
|
+
EventObserver instances as they added, modified, or deleted.
|
86
|
+
2. Custom standalone queues. You may extend EventListener to declare individual queues not associated with a specific
|
87
|
+
object instance.
|
83
88
|
|
84
|
-
|
85
|
-
|
86
|
-
* set log level to info or higher for all event thread messages
|
89
|
+
The EventListener process will automatically create queues on initial startup if they do not already exist. This allows
|
90
|
+
for cold startup on a new AMQP broker.
|
87
91
|
|
88
|
-
###
|
92
|
+
### Message Delivery Information and Metadata
|
93
|
+
|
94
|
+
Each time that a message is retrieved from the queue, the following properties are set in the current thread:
|
95
|
+
|
96
|
+
| name | contents |
|
97
|
+
| ---- | -------- |
|
98
|
+
| isimud_queue_name | Name of the queue processing the thread |
|
99
|
+
| isimud_delivery_info | Message delivery information (*Bunny::DeliveryInfo*) |
|
100
|
+
| isimud_properties | Message properties metadata (*Bunny::MessageProperties*) |
|
101
|
+
|
102
|
+
### Exception Handling
|
103
|
+
|
104
|
+
If an uncaught instance of StandardError is raised during message processing, all exception handlers added to the
|
105
|
+
client are run in the order they were declared (see Client#on_exception). Any exceptions raised by the exception
|
106
|
+
handlers themselves are silently ignored.
|
107
|
+
|
108
|
+
You can configure the disposition of the message that triggered the exception using the configuration attribute
|
109
|
+
Isimud.retry_failures as follows:
|
110
|
+
|
111
|
+
| Isimud.retry_failures | Behavior |
|
112
|
+
| :-------------------: | -------- |
|
113
|
+
| *false* | Never requeue messages (default) |
|
114
|
+
| *true* | Always requeue messages |
|
115
|
+
| *nil* | Conditionally re-queue messages based on exception handler return values |
|
116
|
+
|
117
|
+
When conditional re-queueing is enabled, requeue is determined based on the return value of all exception handlers,
|
118
|
+
logically AND-ed. If the result is truthy, the message is re-queued. If the return value of any handler is falsey,
|
119
|
+
the message is not re-queued.
|
120
|
+
|
121
|
+
# Changes
|
122
|
+
|
123
|
+
## 1.4.1
|
124
|
+
|
125
|
+
* Enable conditional re-queuing of messages after an exception is raised (see *Exception Handling* above).
|
126
|
+
* Log messages for receipt and ack of messages downgraded to debug level.
|
127
|
+
* Force manual_ack mode for all queue subscriptions.
|
128
|
+
|
129
|
+
## 1.3.8
|
89
130
|
|
90
131
|
* In EventListener event thread, rescue all exceptions, not just Bunny ones.
|
91
132
|
|
92
|
-
|
133
|
+
## 1.3.7
|
93
134
|
|
94
135
|
* Change instance var 'status' inside the start event thread
|
95
136
|
|
96
|
-
|
137
|
+
## 1.3.6
|
97
138
|
|
98
139
|
* Don't include ModelWatcher attributes in event publish log message
|
99
140
|
* Include routing key in ModelWatcher event publish log message
|
100
141
|
|
101
|
-
|
142
|
+
## 1.3.5
|
102
143
|
|
103
144
|
* Added option to EventObserver#observe_events to recreate bindings for observer queues
|
104
145
|
* EventListener only create bindings and queues for EventObserver instances on initial startup
|
105
146
|
|
106
|
-
|
147
|
+
## 1.3.4
|
107
148
|
|
108
149
|
* Always recreate bindings for observer queues when EventListener starts the event thread.
|
109
150
|
* Cleaned up method signature on EventObserver#delete_queue so that a client may be passed to it.
|
110
151
|
|
111
|
-
|
152
|
+
## 1.3.3
|
112
153
|
|
113
154
|
* Fixed handling of exceptions in TestClient
|
114
155
|
* Make EventListener#has_observer? public
|
115
156
|
|
116
|
-
|
157
|
+
## 1.3.1
|
117
158
|
|
118
159
|
* Add EventObserver#deactivate_observer to trigger queue deletion for an observer instance.
|
119
160
|
|
120
|
-
|
161
|
+
## 1.3.0
|
121
162
|
|
122
163
|
* Added a new method, EventListener#bind_event_queues() for registering custom event handlers. Override
|
123
164
|
this method instead of bind_queues() to bind custom queues not handled by EventObserver instances.
|
@@ -125,27 +166,27 @@ if they do not exist.
|
|
125
166
|
hosts sharing the same PID.
|
126
167
|
* Added lots of documentation.
|
127
168
|
|
128
|
-
|
169
|
+
## 1.2.1
|
129
170
|
|
130
171
|
* Include attributes in ModelWatcher destroy message
|
131
172
|
|
132
|
-
|
173
|
+
## 1.2.0
|
133
174
|
|
134
175
|
* EventObserver#update_queue now always binds current routing keys. This ensures that when an enable_listener? changes
|
135
176
|
state from false to true during an update, all bindings for the queue are established.
|
136
177
|
* Add EventObserver#activate_observer(), which creates and binds a queue for an observer instance on demand.
|
137
178
|
* Add declaration for Client#find_queue, and normalize the method signature for subclasses.
|
138
179
|
|
139
|
-
|
180
|
+
## 1.1.0
|
140
181
|
|
141
182
|
* Clients now support multiple exception handlers. Each call to Client#on_exception will add a new block to the
|
142
183
|
exception handlers list
|
143
184
|
|
144
|
-
|
185
|
+
## 1.0.2
|
145
186
|
|
146
|
-
|
187
|
+
### Breaking Changes:
|
147
188
|
|
148
|
-
* EventObserver instances are now required to have the persistent attribute
|
189
|
+
* EventObserver instances are now required to have the persistent attribute *exchange_routing_keys*. These are used to
|
149
190
|
store the current value of routing keys assoicated with an instance. The queue associated with an EventObserver is
|
150
191
|
now created and updated at the same time the EventObserver is updated, rather than relying on the EventListener to
|
151
192
|
create it.
|
@@ -156,7 +197,7 @@ if they do not exist.
|
|
156
197
|
* Client#create_queue no longer accepts a block parameter and does not subscribe to messages.
|
157
198
|
* Removed Client#rebind.
|
158
199
|
|
159
|
-
|
200
|
+
### Other Changes:
|
160
201
|
|
161
202
|
* TestClient::Queue now responds to bind() and unbind() in the same manner as Bunny::Queue.
|
162
203
|
* BunnyClient#create_queue now may be called without a block to instantiate an AMQP queue without subscribing to messages
|
@@ -164,16 +205,16 @@ if they do not exist.
|
|
164
205
|
* Changed BunnyClient#delete_queue to make it more reliable.
|
165
206
|
* EventListener now uses a shared, durable queue for monitoring events on modified EventObserver instances.
|
166
207
|
|
167
|
-
|
208
|
+
## 0.5.2
|
168
209
|
|
169
210
|
* Fixed regexp bug in TestClient affecting message delivery
|
170
211
|
* Add more logging for EventObserver binding
|
171
212
|
|
172
|
-
|
213
|
+
## 0.5.1
|
173
214
|
|
174
215
|
* Added Event#attributes
|
175
216
|
|
176
|
-
|
217
|
+
## 0.5.0
|
177
218
|
|
178
219
|
* Allow EventObserver classes to override the exchange for listening to events
|
179
220
|
* Corrected initialization of EventListener for handling defaults
|
@@ -181,23 +222,23 @@ if they do not exist.
|
|
181
222
|
* Fixed a bug in EventObserver that caused ModelWatcher to not send update events appropriately when default columns are watched
|
182
223
|
* Moved requires for Isimud below config attribute declarations
|
183
224
|
|
184
|
-
|
225
|
+
## 0.4.10
|
185
226
|
|
186
227
|
* Corrected trap of INT and TERM signals
|
187
228
|
* Added error counter mutex and cleaned up logging
|
188
229
|
* Corrected race condition for registering EventObserver classes
|
189
230
|
|
190
|
-
|
231
|
+
## 0.4.5
|
191
232
|
|
192
233
|
* Fixed issues with exception handling
|
193
234
|
|
194
|
-
|
235
|
+
## 0.4.1
|
195
236
|
|
196
237
|
* Event now accepts an exchange option for publishing
|
197
238
|
* Added Isimud.events_exchange
|
198
239
|
* Cleaned up initializer template
|
199
240
|
|
200
|
-
|
241
|
+
## 0.4.0
|
201
242
|
|
202
243
|
* Event logging of published message now set to debug level
|
203
244
|
* Added EventListener and EventObserver
|
@@ -206,96 +247,91 @@ if they do not exist.
|
|
206
247
|
* Clients can now be configured with an exception handler. This is used by EventListener to intercept exceptions raised
|
207
248
|
during message handling by an observer.
|
208
249
|
|
209
|
-
|
250
|
+
## 0.3.7
|
210
251
|
|
211
252
|
* Added EventObserver mix-in
|
212
253
|
* Added accessors for queues and routing_keys to TestClient
|
213
254
|
|
214
|
-
|
255
|
+
## 0.3.6
|
215
256
|
|
216
257
|
* Reraise all exceptions in message processing block in BunnyClient#bind.
|
217
258
|
|
218
|
-
|
259
|
+
## 0.3.5
|
219
260
|
|
220
261
|
* Fixed deprecation on setting manual ack on Bunny queue subscriptions.
|
221
262
|
|
222
|
-
|
263
|
+
## 0.3.4
|
223
264
|
|
224
265
|
* Catch Timeout::Error in ModelWatcher.synchronize
|
225
266
|
|
226
|
-
|
267
|
+
## 0.3.1
|
227
268
|
|
228
269
|
* Tuning gargabe collector on ModelWatcher.synchronize
|
229
270
|
|
230
|
-
|
271
|
+
## 0.3.0
|
231
272
|
|
232
273
|
* Added rake task for manual synchronization using ModelWatcher
|
233
274
|
|
234
|
-
|
275
|
+
## 0.2.17
|
235
276
|
|
236
277
|
* Added guard on null #updated_at instances
|
237
278
|
* Added ModelWatcher#isimud_sync for manual synchronization
|
238
279
|
|
239
|
-
|
280
|
+
## 0.2.15
|
240
281
|
|
241
282
|
* Changed Event#send to Event#publish, to avoid overloading Ruby.
|
242
283
|
|
243
|
-
|
284
|
+
## 0.2.13
|
244
285
|
|
245
286
|
* Add :omit_parameters option to Event#as_json
|
246
287
|
|
247
|
-
|
288
|
+
## 0.2.12
|
248
289
|
|
249
290
|
* Demodulize ActiveRecord model name when setting ModelWatcher event type
|
250
291
|
|
251
|
-
|
292
|
+
## 0.2.10
|
252
293
|
|
253
294
|
* Added Isimud.retry_failures
|
254
295
|
* Isimud::ModelWatcher now includes :created_at and :updated_at columns by default
|
255
296
|
* Added Isimud::Client.connected?
|
256
297
|
* Avoid connecting to database when Isimud::ModelWatcher.watch_attributes is called
|
257
298
|
|
258
|
-
|
299
|
+
## 0.2.4
|
259
300
|
|
260
301
|
* Add Isimud::ModelWatcher#isimud_synchronize? to allow conditional synchronization. Override to activate.
|
261
302
|
|
262
|
-
|
303
|
+
## 0.2.2
|
263
304
|
|
264
305
|
* Add enable_model_watcher configuration parameter (default is true)
|
265
306
|
|
266
|
-
|
307
|
+
## 0.2.0
|
267
308
|
|
268
309
|
* Added Isimud::Event
|
269
310
|
* Extracted Isimud::Client#log into Isimud::Logging module
|
270
311
|
|
271
|
-
|
312
|
+
## 0.1.4
|
272
313
|
|
273
314
|
* Don't reject messages when exception is raised in bind block
|
274
315
|
|
275
|
-
|
316
|
+
## 0.1.3
|
276
317
|
|
277
318
|
* Upgrade bunny gem requirement to 1.3.x
|
278
319
|
* Fixed message acknowledgements
|
279
320
|
* Added log_level configuration parameter (default is :debug)
|
280
321
|
|
281
|
-
|
322
|
+
## 0.1.2
|
282
323
|
|
283
324
|
* Reject message with requeue when an exception is raised during processing
|
284
325
|
|
285
|
-
|
326
|
+
## 0.1.1
|
286
327
|
|
287
328
|
* Enable channel confirmations for message publication
|
288
329
|
|
289
|
-
|
330
|
+
## 0.1.0
|
290
331
|
|
291
332
|
* ModelWatcher mix-in for ActiveRecord, sends events on instance changes
|
292
333
|
* Initializer generator for Rails
|
293
334
|
|
294
|
-
### 0.0.8 (first working version)
|
295
|
-
|
296
|
-
* Don't clear the queues when reconnecting TestClient
|
297
|
-
|
298
|
-
|
299
335
|
## Contributing
|
300
336
|
|
301
337
|
1. Fork it ( https://github.com/KeasInc/isimud/fork )
|