propono 1.6.0 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +5 -2
- data/lib/propono/configuration.rb +2 -1
- data/lib/propono/services/queue_listener.rb +1 -1
- data/lib/propono/version.rb +1 -1
- data/test/configuration_test.rb +7 -1
- data/test/services/queue_listener_test.rb +21 -17
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 013ba7a6dc0e9ffb8fa06aefbec64ee0c398f933
|
4
|
+
data.tar.gz: 1fd1f5e5b5cca50704e67bc874e33c79360c846a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5a91dcbc2c42611e718affa73fd7be0a16f8d59d7585384dff86c272bece9d47d2d46dcf45466b8acb515778b181059e63d60cffd40e250643d8e6e2052b334
|
7
|
+
data.tar.gz: 44ff1b11418f68dca4f5886a66f8c709251310f362f1ec24bf1c450a76e3d42b0e628a6ee93546c7841b56e431b17f9030b7e2a292aa7ec7655a1d1acd589173
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# 1.7.0 / 2017-01-17
|
2
|
+
* [FEATURE] Added num_messages_per_poll config option to allow you to change how many messages you pull from AWS per poll cycle.
|
3
|
+
|
1
4
|
# 1.6.0 / 2015-06-05
|
2
5
|
* [FEATURE] Require fog-aws gem instead of fog (:blue_heart: @mhuggins)
|
3
6
|
* [FEATURE] Change licence to MIT (:blue_heart: @BiggerNoise)
|
data/README.md
CHANGED
@@ -144,7 +144,7 @@ Propono.config do |config|
|
|
144
144
|
config.secret_key = "A AWS secret key"
|
145
145
|
# Or use AWS IAM profile of the machine
|
146
146
|
config.use_iam_profile = true
|
147
|
-
|
147
|
+
|
148
148
|
config.queue_region = "An AWS queue region"
|
149
149
|
config.application_name = "A name unique in your network"
|
150
150
|
config.udp_host = "The host of a machine used for UDP proxying"
|
@@ -152,6 +152,9 @@ Propono.config do |config|
|
|
152
152
|
config.tcp_host = "The host of a machine used for TCP proxying"
|
153
153
|
config.tcp_port = "The port of a machine used for TCP proxying"
|
154
154
|
config.logger = "A logger such as Log4r or Rails.logger"
|
155
|
+
|
156
|
+
config.max_retries = "The number of retries if a message raises an exception before being placed on the failed queue"
|
157
|
+
config.num_messages_per_poll = "The number of messages retrieved per poll to SQS"
|
155
158
|
end
|
156
159
|
```
|
157
160
|
|
@@ -169,7 +172,7 @@ We'd love to have you involved. Please read our [contributing guide](https://git
|
|
169
172
|
|
170
173
|
### Contributors
|
171
174
|
|
172
|
-
This project is managed by the [Meducation team](http://company.meducation.net/about#team).
|
175
|
+
This project is managed by the [Meducation team](http://company.meducation.net/about#team).
|
173
176
|
|
174
177
|
These individuals have come up with the ideas and written the code that made this possible:
|
175
178
|
|
@@ -11,7 +11,7 @@ module Propono
|
|
11
11
|
:udp_host, :udp_port,
|
12
12
|
:tcp_host, :tcp_port,
|
13
13
|
:logger,
|
14
|
-
:max_retries
|
14
|
+
:max_retries, :num_messages_per_poll
|
15
15
|
]
|
16
16
|
attr_writer *SETTINGS
|
17
17
|
|
@@ -20,6 +20,7 @@ module Propono
|
|
20
20
|
self.queue_suffix = ""
|
21
21
|
self.use_iam_profile = false
|
22
22
|
self.max_retries = 0
|
23
|
+
self.num_messages_per_poll = 10
|
23
24
|
end
|
24
25
|
|
25
26
|
SETTINGS.each do |setting|
|
@@ -35,7 +35,7 @@ module Propono
|
|
35
35
|
private
|
36
36
|
|
37
37
|
def read_messages
|
38
|
-
read_messages_from_queue(main_queue_url,
|
38
|
+
read_messages_from_queue(main_queue_url, Propono.config.num_messages_per_poll) || read_messages_from_queue(slow_queue_url, 1)
|
39
39
|
end
|
40
40
|
|
41
41
|
def read_messages_from_queue(queue_url, num_messages)
|
data/lib/propono/version.rb
CHANGED
data/test/configuration_test.rb
CHANGED
@@ -83,6 +83,12 @@ module Propono
|
|
83
83
|
assert_equal val, Propono.config.tcp_port
|
84
84
|
end
|
85
85
|
|
86
|
+
def test_num_messages_per_poll
|
87
|
+
val = 3
|
88
|
+
Propono.config.num_messages_per_poll = val
|
89
|
+
assert_equal val, Propono.config.num_messages_per_poll
|
90
|
+
end
|
91
|
+
|
86
92
|
def test_missing_access_key_throws_exception
|
87
93
|
assert_raises(ProponoConfigurationError) do
|
88
94
|
Propono.config.access_key
|
@@ -110,7 +116,7 @@ module Propono
|
|
110
116
|
def test_default_max_retries
|
111
117
|
assert_equal 0, Propono.config.max_retries
|
112
118
|
end
|
113
|
-
|
119
|
+
|
114
120
|
def test_max_retries
|
115
121
|
val = 5
|
116
122
|
Propono.config.max_retries = val
|
@@ -26,6 +26,8 @@ module Propono
|
|
26
26
|
@listener = QueueListener.new(@topic_id) {}
|
27
27
|
@listener.stubs(sqs: @sqs)
|
28
28
|
|
29
|
+
Propono.config.num_messages_per_poll = 14
|
30
|
+
|
29
31
|
Propono.config.max_retries = 0
|
30
32
|
end
|
31
33
|
|
@@ -60,30 +62,32 @@ module Propono
|
|
60
62
|
end
|
61
63
|
|
62
64
|
def test_read_message_from_sqs
|
65
|
+
max_number_of_messages = 5
|
63
66
|
queue_url = @listener.send(:main_queue_url)
|
64
|
-
options = { 'MaxNumberOfMessages' =>
|
67
|
+
options = { 'MaxNumberOfMessages' => max_number_of_messages }
|
65
68
|
@sqs.expects(:receive_message).with(queue_url, options).returns(@sqs_response)
|
66
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
69
|
+
@listener.send(:read_messages_from_queue, queue_url, max_number_of_messages)
|
67
70
|
end
|
68
71
|
|
69
72
|
def test_log_message_from_sqs
|
70
73
|
queue_url = @listener.send(:main_queue_url)
|
71
74
|
Propono.config.logger.expects(:info).with() {|x| x == "Propono [#{@message1_id}]: Received from sqs."}
|
72
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
75
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
73
76
|
end
|
74
77
|
|
75
78
|
def test_read_messages_calls_process_message_for_each_msg
|
79
|
+
|
76
80
|
queue_url = @listener.send(:main_queue_url)
|
77
81
|
@listener.expects(:process_raw_message).with(@sqs_message1, queue_url)
|
78
82
|
@listener.expects(:process_raw_message).with(@sqs_message2, queue_url)
|
79
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
83
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
80
84
|
end
|
81
85
|
|
82
86
|
def test_read_messages_does_not_call_process_messages_if_there_are_none
|
83
87
|
queue_url = @listener.send(:main_queue_url)
|
84
88
|
@sqs_response.stubs(body: {"Message" => []})
|
85
89
|
@listener.expects(:process_message).never
|
86
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
90
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
87
91
|
end
|
88
92
|
|
89
93
|
def test_exception_from_sqs_is_logged
|
@@ -92,7 +96,7 @@ module Propono
|
|
92
96
|
@sqs.stubs(:receive_message).raises(StandardError)
|
93
97
|
Propono.config.logger.expects(:error).with("Unexpected error reading from queue http://example.com")
|
94
98
|
Propono.config.logger.expects(:error).with() {|x| x.is_a?(StandardError)}
|
95
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
99
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
96
100
|
end
|
97
101
|
|
98
102
|
def test_forbidden_error_is_logged_and_re_raised
|
@@ -102,7 +106,7 @@ module Propono
|
|
102
106
|
Propono.config.logger.expects(:error).with("Forbidden error caught and re-raised. http://example.com")
|
103
107
|
Propono.config.logger.expects(:error).with() {|x| x.is_a?(Excon::Errors::Forbidden)}
|
104
108
|
assert_raises Excon::Errors::Forbidden do
|
105
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
109
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
106
110
|
end
|
107
111
|
end
|
108
112
|
|
@@ -140,7 +144,7 @@ module Propono
|
|
140
144
|
@sqs.expects(:delete_message).with(queue_url, @receipt_handle2)
|
141
145
|
|
142
146
|
@listener.stubs(queue_url: queue_url)
|
143
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
147
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
144
148
|
end
|
145
149
|
|
146
150
|
def test_messages_are_deleted_if_there_is_an_exception_processing
|
@@ -155,7 +159,7 @@ module Propono
|
|
155
159
|
@listener.stubs(sqs: @sqs)
|
156
160
|
@listener.stubs(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message1), exception)
|
157
161
|
@listener.stubs(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message2), exception)
|
158
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
162
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
159
163
|
end
|
160
164
|
|
161
165
|
def test_messages_are_retried_or_abandoned_on_failure
|
@@ -166,7 +170,7 @@ module Propono
|
|
166
170
|
@listener.expects(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message1), exception)
|
167
171
|
@listener.expects(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message2), exception)
|
168
172
|
@listener.stubs(sqs: @sqs)
|
169
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
173
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
170
174
|
end
|
171
175
|
|
172
176
|
def test_failed_on_moving_to_failed_queue_does_not_delete
|
@@ -179,7 +183,7 @@ module Propono
|
|
179
183
|
@listener.expects(:delete_message).with(@sqs_message1).never
|
180
184
|
@listener.expects(:delete_message).with(@sqs_message2).never
|
181
185
|
@listener.stubs(sqs: @sqs)
|
182
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
186
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
183
187
|
end
|
184
188
|
|
185
189
|
def test_messages_are_moved_to_corrupt_queue_if_there_is_an_parsing_exception
|
@@ -191,7 +195,7 @@ module Propono
|
|
191
195
|
|
192
196
|
@listener.expects(:move_to_corrupt_queue).with(sqs_message1)
|
193
197
|
@listener.expects(:move_to_corrupt_queue).with(sqs_message2)
|
194
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
198
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
195
199
|
end
|
196
200
|
|
197
201
|
def test_message_moved_to_failed_queue_if_there_is_an_exception_and_retry_count_is_zero
|
@@ -200,7 +204,7 @@ module Propono
|
|
200
204
|
end
|
201
205
|
|
202
206
|
def test_message_requeued_if_there_is_an_exception_but_failure_count_less_than_retry_count
|
203
|
-
Propono.config.max_retries =
|
207
|
+
Propono.config.max_retries = Propono.config.num_messages_per_poll
|
204
208
|
message = SqsMessage.new(@sqs_message1)
|
205
209
|
message.stubs(failure_count: 4)
|
206
210
|
@sqs.expects(:send_message).with(regexp_matches(/https:\/\/queue.amazonaws.com\/[0-9]+\/MyApp-some-topic$/), anything)
|
@@ -208,9 +212,9 @@ module Propono
|
|
208
212
|
end
|
209
213
|
|
210
214
|
def test_message_requeued_if_there_is_an_exception_but_failure_count_exceeds_than_retry_count
|
211
|
-
Propono.config.max_retries =
|
215
|
+
Propono.config.max_retries = Propono.config.num_messages_per_poll
|
212
216
|
message = SqsMessage.new(@sqs_message1)
|
213
|
-
message.stubs(failure_count:
|
217
|
+
message.stubs(failure_count: Propono.config.num_messages_per_poll)
|
214
218
|
@sqs.expects(:send_message).with(regexp_matches(/https:\/\/queue.amazonaws.com\/[0-9]+\/MyApp-some-topic-failed/), anything)
|
215
219
|
@listener.send(:requeue_message_on_failure, message, StandardError.new)
|
216
220
|
end
|
@@ -226,7 +230,7 @@ module Propono
|
|
226
230
|
slow_queue_url = "http://slow.com"
|
227
231
|
@listener.stubs(slow_queue_url: slow_queue_url)
|
228
232
|
|
229
|
-
@listener.expects(:read_messages_from_queue).with(main_queue_url,
|
233
|
+
@listener.expects(:read_messages_from_queue).with(main_queue_url, Propono.config.num_messages_per_poll).returns(false)
|
230
234
|
@listener.expects(:read_messages_from_queue).with(slow_queue_url, 1)
|
231
235
|
@listener.send(:read_messages)
|
232
236
|
end
|
@@ -235,7 +239,7 @@ module Propono
|
|
235
239
|
main_queue_url = "http://normal.com"
|
236
240
|
@listener.stubs(main_queue_url: main_queue_url)
|
237
241
|
|
238
|
-
@listener.expects(:read_messages_from_queue).with(main_queue_url,
|
242
|
+
@listener.expects(:read_messages_from_queue).with(main_queue_url, Propono.config.num_messages_per_poll).returns(true)
|
239
243
|
@listener.send(:read_messages)
|
240
244
|
end
|
241
245
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: propono
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MalcyL
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fog-aws
|
@@ -179,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
179
179
|
version: '0'
|
180
180
|
requirements: []
|
181
181
|
rubyforge_project:
|
182
|
-
rubygems_version: 2.
|
182
|
+
rubygems_version: 2.6.8
|
183
183
|
signing_key:
|
184
184
|
specification_version: 4
|
185
185
|
summary: General purpose pub/sub library built on top of AWS SNS and SQS
|