sqs_consumer 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 33a9b66357fd4dddc90544f4a29ede139eb6261c
4
+ data.tar.gz: f226ec7a85d66793784413a527ec2cd01329bae6
5
+ SHA512:
6
+ metadata.gz: 5de826551c5acbcedef8f8b26a554ff31b8ad8cd6b7dcabcb79b16074007940ef739569e5e455b4df1edb5588d40f351afb8852c04792c66d0bf1e147b823574
7
+ data.tar.gz: 4929afce3b702d05faf7bc4098d79f214c2cf8951fd08e66f14308cc49862e31a9ddd34114d97ce14ed354eec30125997c3e20f006ed86e2004fa10f56dde9b8
@@ -0,0 +1,3 @@
1
+ Gem.find_files("sqs_consumer/**/*.rb").each do |path|
2
+ require path.gsub(/\.rb$/, '')
3
+ end
@@ -0,0 +1,69 @@
1
+ require 'aws-sdk'
2
+ require 'paul_bunyan'
3
+
4
+ module SqsConsumer
5
+ class Consumer
6
+ RECEIVE_MESSAGES_DEFAULT = {max_number_of_messages: 1, wait_time_seconds: 1}
7
+
8
+ def initialize(endpoint:, region:, work_queue_name:, throttle_sleep_duration: 0.0,
9
+ receive_messages_options: {}, message_filter: nil, processor_action: nil, success_result: nil, error_callback: nil)
10
+ @client_config = {
11
+ endpoint: endpoint,
12
+ region: region
13
+ }
14
+ @work_queue_name = work_queue_name
15
+ @throttle_sleep_duration = throttle_sleep_duration
16
+ @logger = PaulBunyan.logger
17
+ @receive_messages_options = receive_messages_options.merge(RECEIVE_MESSAGES_DEFAULT)
18
+ @message_filter = message_filter
19
+ @processor_action = processor_action
20
+ @success_result = success_result
21
+ @error_callback = error_callback
22
+ @running = false
23
+ end
24
+
25
+ def should_process?(sqs_message)
26
+ @message_filter.nil? || @message_filter.call(sqs_message.message_attributes)
27
+ end
28
+
29
+ def stop
30
+ @running = false
31
+ end
32
+
33
+ def running?
34
+ @running
35
+ end
36
+
37
+ def create_queue
38
+ sqs_client = Aws::SQS::Client.new(@client_config)
39
+ sqs_queue_url = sqs_client.get_queue_url(queue_name: @work_queue_name)[:queue_url]
40
+ Aws::SQS::Queue.new(sqs_queue_url, sqs_client.config)
41
+ end
42
+
43
+ def run
44
+ @running = true
45
+ queue = create_queue
46
+
47
+ loop do
48
+ sqs_messages = queue.receive_messages(@receive_messages_options)
49
+
50
+ @logger.debug { "Got #{sqs_messages.size} messages from SQS." } unless sqs_messages.size == 0
51
+
52
+ sqs_messages.each do |sqs_message|
53
+ begin
54
+ if should_process? sqs_message
55
+ result = @processor_action&.call(sqs_message)
56
+ if @success_result.nil? || @success_result == result
57
+ sqs_message.delete
58
+ end
59
+ end
60
+ rescue => e
61
+ @error_callback&.call(e, sqs_message)
62
+ end
63
+ end
64
+ break unless running?
65
+ sleep @throttle_sleep_duration unless @throttle_sleep_duration.zero?
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ module SqsConsumer
2
+ VERSION = "1.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sqs_consumer
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Augusto Callejas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sdk
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: paul_bunyan
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: factory_girl
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.5'
69
+ description: An AWS SQS consumer library that consumes messages from a queue and processes
70
+ them
71
+ email: acallejas@instructure.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/sqs_consumer.rb
77
+ - lib/sqs_consumer/consumer.rb
78
+ - lib/sqs_consumer/version.rb
79
+ homepage: https://instructure.com
80
+ licenses:
81
+ - Nonstandard
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.5.1
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: AWS SQS consumer library
103
+ test_files: []