eventq_aws 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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