eventq_aws 0.4.0 → 1.0.0

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: 7039aff7eed4a4842ed95ada249d8cc616b3efa5
4
- data.tar.gz: 4b9bb9168911dc4ce3a21490a332181299101de5
3
+ metadata.gz: 3f59d43ccd53c473e52953c7c9148c2dc0b53e8d
4
+ data.tar.gz: e3c52d01f9d13f3187aa564a3ebd26b0688b38de
5
5
  SHA512:
6
- metadata.gz: c4607ac871cfac8658cbb263cfbf3a943fc680cb0d87e4eb145a938195105f13dd285d548fc56a2844fa93be1e4fc5510ea3b638339d8840d1966de8568ab48a
7
- data.tar.gz: 55d5ba87b7bc20acb29dc408cd0c3d2be134186750d66dc392ab99aa7a57177ecbef5debb023a92578d39a7e9940e5174ed720be4f09fed2f8a702aea64b5874
6
+ metadata.gz: c14d414adb62321ed87a14870d12d2018bfab6b9c51b39aee771d1e5fbacc03cbc09653de84a3748b4f37cd0735217ab0960d6885c18e63f877047605a8a3d80
7
+ data.tar.gz: 52075f013c6ddeff487e606089dd3fd3f1caac01fbe7b40a1a37a3ce753b6fc4b233b35e20c9d35ab402e954b2379d836257e5c42e8207122952968d8adb18d6
@@ -28,7 +28,7 @@ module EventQ
28
28
  subject: event_type
29
29
  })
30
30
 
31
- EventQ.logger.debug "[EVENTQ_AWS] - Raised event. Message: #{message} | Type: #{event_type}."
31
+ EventQ.log(:debug, "[#{self.class}] - Raised event. Message: #{message} | Type: #{event_type}.")
32
32
 
33
33
  return response.message_id
34
34
 
@@ -27,7 +27,7 @@ module EventQ
27
27
  response = @client.sqs.create_queue({
28
28
  queue_name: queue.name,
29
29
  attributes: {
30
- 'VisibilityTimeout' => (queue.retry_delay / 1000).to_s
30
+ 'VisibilityTimeout' => 300.to_s #5 minutes
31
31
  }
32
32
  })
33
33
 
@@ -60,7 +60,7 @@ module EventQ
60
60
  @client.sqs.set_queue_attributes({
61
61
  queue_url: url, # required
62
62
  attributes: {
63
- 'VisibilityTimeout' => (queue.retry_delay / 1000).to_s
63
+ 'VisibilityTimeout' => 300.to_s
64
64
  }
65
65
  })
66
66
  return url
@@ -13,7 +13,7 @@ module EventQ
13
13
 
14
14
  def start(queue, options = {}, &block)
15
15
 
16
- EventQ.logger.debug '[EVENTQ_AWS::QUEUE_WORKER] - Preparing to start listening for messages.'
16
+ EventQ.log(:info, "[#{self.class}] - Preparing to start listening for messages.")
17
17
 
18
18
  configure(queue, options)
19
19
 
@@ -23,7 +23,7 @@ module EventQ
23
23
 
24
24
  raise 'Worker is already running.' if running?
25
25
 
26
- EventQ.logger.debug '[EVENTQ_AWS::QUEUE_WORKER] - Listening for messages.'
26
+ EventQ.log(:info, "[#{self.class}] - Listening for messages.")
27
27
 
28
28
  @is_running = true
29
29
  @threads = []
@@ -72,7 +72,7 @@ module EventQ
72
72
 
73
73
  message_args = EventQ::MessageArgs.new(payload.type, retry_attempts)
74
74
 
75
- EventQ.logger.debug "[EVENTQ_AWS::QUEUE_WORKER] - Message received. Retry Attempts: #{retry_attempts}"
75
+ EventQ.log(:debug, "[#{self.class}] - Message received. Retry Attempts: #{retry_attempts}")
76
76
 
77
77
  #begin worker block for queue message
78
78
  begin
@@ -81,35 +81,35 @@ module EventQ
81
81
 
82
82
  if message_args.abort == true
83
83
  abort = true
84
- EventQ.logger.debug '[EVENTQ_AWS::QUEUE_WORKER] - Message aborted.'
84
+ EventQ.log(:debug, "[#{self.class}] - Message aborted.")
85
85
  else
86
86
  #accept the message as processed
87
87
  client.sqs.delete_message({ queue_url: q, receipt_handle: msg.receipt_handle })
88
- EventQ.logger.debug '[EVENTQ_AWS::QUEUE_WORKER] - Message acknowledged.'
88
+ EventQ.log(:debug, "[#{self.class}] - Message acknowledged.")
89
89
  received = true
90
90
  end
91
91
 
92
92
  rescue => e
93
- EventQ.logger.debug "[EVENTQ_AWS::QUEUE_WORKER] - An unhandled error happened while attempting to process a queue message. Error: #{e}"
93
+ EventQ.log(:error, "[#{self.class}] - An unhandled error happened while attempting to process a queue message. Error: #{e}")
94
94
 
95
95
  error = true
96
96
 
97
97
  end
98
98
 
99
99
  if abort || error
100
- EventQ.logger.debug '[EVENTQ_AWS::QUEUE_WORKER] - Message rejected.'
100
+ EventQ.log(:debug, "[#{self.class}] - Message rejected.")
101
101
  reject_message(queue, client, msg, q, retry_attempts)
102
102
  end
103
103
 
104
104
  end
105
105
 
106
106
  rescue => e
107
- EventQ.logger.error "[EVENTQ_AWS::QUEUE_WORKER] - An error occured attempting to retrieve a message from the queue. Error: #{e}"
107
+ EventQ.log(:error, "[#{self.class}] - An error occurred attempting to retrieve a message from the queue. Error: #{e}")
108
108
  end
109
109
 
110
110
  #check if any message was received
111
111
  if !received && !error
112
- EventQ.logger.error "[EVENTQ_AWS::QUEUE_WORKER] - No message received. Sleeping for #{@sleep} seconds"
112
+ EventQ.log(:debug, "[#{self.class}] - No message received. Sleeping for #{@sleep} seconds")
113
113
  #no message received so sleep before attempting to pop another message from the queue
114
114
  sleep(@sleep)
115
115
  end
@@ -129,7 +129,7 @@ module EventQ
129
129
  end
130
130
 
131
131
  def stop
132
- EventQ.logger.debug '[EVENTQ_AWS::QUEUE_WORKER] - Stopping.'
132
+ EventQ.log(:info, "[#{self.class}] - Stopping.")
133
133
  @is_running = false
134
134
  @threads.each { |thr| thr.join }
135
135
  return true
@@ -146,16 +146,52 @@ module EventQ
146
146
  private
147
147
 
148
148
  def reject_message(queue, client, msg, q, retry_attempts)
149
+
149
150
  if !queue.allow_retry || retry_attempts >= queue.max_retry_attempts
150
151
  #remove the message from the queue so that it does not get retried again
151
152
  client.sqs.delete_message({ queue_url: q, receipt_handle: msg.receipt_handle })
152
153
 
153
- if retry_attempts >= queue.max_retry_attempts && @retry_exceeded_block != nil
154
- EventQ.logger.debug '[EVENTQ_AWS::QUEUE_WORKER] - Executing retry exceeded block.'
155
- @retry_exceeded_block.call(message)
154
+ if retry_attempts >= queue.max_retry_attempts
155
+
156
+ EventQ.log(:debug, "[#{self.class}] - Message retry attempt limit exceeded.")
157
+
158
+ if @retry_exceeded_block != nil
159
+ EventQ.log(:debug, "[#{self.class}] - Executing retry exceeded block.")
160
+ @retry_exceeded_block.call(message)
161
+ end
162
+
163
+ end
164
+
165
+ elsif queue.allow_retry
166
+
167
+ retry_attempts += 1
168
+
169
+ if queue.allow_retry_back_off == true
170
+ EventQ.log(:debug, "[#{self.class}] - Calculating message back off retry delay. Attempts: #{retry_attempts} * Delay: #{queue.retry_delay}")
171
+ visibility_timeout = (queue.retry_delay * retry_attempts) / 1000
172
+ if visibility_timeout > (queue.max_retry_delay / 1000)
173
+ EventQ.log(:debug, "[#{self.class}] - Max message back off retry delay reached.")
174
+ visibility_timeout = queue.max_retry_delay / 1000
175
+ end
176
+ else
177
+ EventQ.log(:debug, "[#{self.class}] - Setting fixed retry delay for message.")
178
+ visibility_timeout = queue.retry_delay / 1000
156
179
  end
157
180
 
181
+ if visibility_timeout > 43200
182
+ EventQ.log(:debug, "[#{self.class}] - AWS max visibility timeout of 12 hours has been exceeded. Setting message retry delay to 12 hours.")
183
+ visibility_timeout = 43200
184
+ end
185
+
186
+ EventQ.log(:debug, "[#{self.class}] - Sending message for retry. Message TTL: #{visibility_timeout}")
187
+ client.sqs.change_message_visibility({
188
+ queue_url: q, # required
189
+ receipt_handle: msg.receipt_handle, # required
190
+ visibility_timeout: visibility_timeout.to_s, # required
191
+ })
192
+
158
193
  end
194
+
159
195
  end
160
196
 
161
197
  def configure(queue, options = {})
@@ -174,7 +210,7 @@ module EventQ
174
210
  @sleep = options[:sleep]
175
211
  end
176
212
 
177
- EventQ.logger.debug "[EVENTQ_AWS::QUEUE_WORKER] - Configuring. Thread Count: #{@thread_count} | Interval Sleep: #{@sleep}."
213
+ EventQ.log(:info, "[#{self.class}] - Configuring. Thread Count: #{@thread_count} | Interval Sleep: #{@sleep}.")
178
214
 
179
215
  return true
180
216
 
@@ -1,5 +1,5 @@
1
1
  module EventQ
2
2
  module Amazon
3
- VERSION = "0.4.0"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventq_aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - vaughanbrittonsage
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-18 00:00:00.000000000 Z
11
+ date: 2016-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.11'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
@@ -84,28 +84,28 @@ dependencies:
84
84
  name: aws-sdk-core
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: eventq_base
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  description: This is the aws implementation for EventQ
@@ -117,13 +117,13 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - bin/console
119
119
  - bin/setup
120
- - lib/eventq_aws.rb
121
120
  - lib/eventq_aws/aws_eventq_client.rb
122
121
  - lib/eventq_aws/aws_queue_client.rb
123
122
  - lib/eventq_aws/aws_queue_manager.rb
124
123
  - lib/eventq_aws/aws_queue_worker.rb
125
124
  - lib/eventq_aws/aws_subscription_manager.rb
126
125
  - lib/eventq_aws/version.rb
126
+ - lib/eventq_aws.rb
127
127
  homepage: https://github.com/vaughanbrittonsage/eventq
128
128
  licenses:
129
129
  - MIT
@@ -134,17 +134,17 @@ require_paths:
134
134
  - lib
135
135
  required_ruby_version: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - ">="
137
+ - - '>='
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - ">="
142
+ - - '>='
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
145
  requirements: []
146
146
  rubyforge_project:
147
- rubygems_version: 2.5.1
147
+ rubygems_version: 2.0.14.1
148
148
  signing_key:
149
149
  specification_version: 4
150
150
  summary: This is the aws implementation for EventQ