mimi-messaging-sqs_sns 0.6.1 → 0.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 +12 -0
- data/README.md +3 -1
- data/examples/query.rb +3 -1
- data/examples/responder.rb +7 -6
- data/lib/mimi/messaging/sqs_sns/adapter.rb +16 -5
- data/lib/mimi/messaging/sqs_sns/consumer.rb +11 -1
- data/lib/mimi/messaging/sqs_sns/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b02992abcb101248ebc54069aba5b3887417930b7613a84ed4b6723ad7ce3060
|
4
|
+
data.tar.gz: 3b830249dfb56e42a7d380571402c2abef55d74f3e90bf0b9f537e105078cd27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d6ecfe3d2202124b10ff03129166249f518fca0f15c2e513ba5ab6b2835a713671618eab623fb39e3cbebe3c8351e0688884743e4f69baa3832b1db94a6a858
|
7
|
+
data.tar.gz: 5bb7ae92080d112f16a4127b010f7f102ebd71cb53b4701b756e9bbab8c43fae42618969c148fd71f67678dbf34ed4d6c734307a1c84f7201229d5bd95c3907a
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## v0.7.0
|
4
|
+
|
5
|
+
* [#1](https://github.com/kukushkin/mimi-messaging-sqs_sns/pull/1)
|
6
|
+
* Added KMS support for creating queues/topics with sever-side encryption enabled
|
7
|
+
* Optimized stopping of the adapter: stopping all consumers in parallel
|
8
|
+
|
9
|
+
|
10
|
+
## v0.6.x
|
11
|
+
|
12
|
+
* Basic functionality implemented, see missing features in [TODO](TODO.md)
|
data/README.md
CHANGED
@@ -2,6 +2,9 @@
|
|
2
2
|
|
3
3
|
AWS SQS/SNS adapter for [mimi-messaging](https://github.com/kukushkin/mimi-messaging).
|
4
4
|
|
5
|
+
* [Changes](CHANGELOG.md)
|
6
|
+
|
7
|
+
|
5
8
|
## Installation
|
6
9
|
|
7
10
|
Add this line to your application's Gemfile:
|
@@ -43,7 +46,6 @@ Mimi::Messaging.configure(
|
|
43
46
|
Mimi::Messaging.start
|
44
47
|
```
|
45
48
|
|
46
|
-
|
47
49
|
## Contributing
|
48
50
|
|
49
51
|
Bug reports and pull requests are welcome on GitHub at https://github.com/kukushkin/mimi-messaging-sqs_sns. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
data/examples/query.rb
CHANGED
@@ -8,6 +8,7 @@ AWS_SQS_ENDPOINT_URL = "http://localstack:4566"
|
|
8
8
|
AWS_SNS_ENDPOINT_URL = "http://localstack:4566"
|
9
9
|
AWS_ACCESS_KEY_ID = "foo"
|
10
10
|
AWS_SECRET_ACCESS_KEY = "bar"
|
11
|
+
AWS_SQS_SNS_KMS_MASTER_KEY_ID = "blah"
|
11
12
|
|
12
13
|
logger = Logger.new(STDOUT)
|
13
14
|
logger.level = Logger::INFO
|
@@ -18,7 +19,8 @@ Mimi::Messaging.configure(
|
|
18
19
|
mq_aws_secret_access_key: AWS_SECRET_ACCESS_KEY,
|
19
20
|
mq_aws_region: AWS_REGION,
|
20
21
|
mq_aws_sqs_endpoint: AWS_SQS_ENDPOINT_URL,
|
21
|
-
mq_aws_sns_endpoint: AWS_SNS_ENDPOINT_URL
|
22
|
+
mq_aws_sns_endpoint: AWS_SNS_ENDPOINT_URL,
|
23
|
+
mq_aws_sqs_sns_kms_master_key_id: AWS_SQS_SNS_KMS_MASTER_KEY_ID
|
22
24
|
)
|
23
25
|
adapter = Mimi::Messaging.adapter
|
24
26
|
|
data/examples/responder.rb
CHANGED
@@ -2,11 +2,12 @@
|
|
2
2
|
|
3
3
|
require "mimi/messaging/sqs_sns"
|
4
4
|
|
5
|
-
AWS_REGION
|
6
|
-
AWS_SQS_ENDPOINT_URL
|
7
|
-
AWS_SNS_ENDPOINT_URL
|
8
|
-
AWS_ACCESS_KEY_ID
|
5
|
+
AWS_REGION = "eu-west-1"
|
6
|
+
AWS_SQS_ENDPOINT_URL = "http://localstack:4566"
|
7
|
+
AWS_SNS_ENDPOINT_URL = "http://localstack:4566"
|
8
|
+
AWS_ACCESS_KEY_ID = "foo"
|
9
9
|
AWS_SECRET_ACCESS_KEY = "bar"
|
10
|
+
AWS_SQS_SNS_KMS_MASTER_KEY_ID = "blah"
|
10
11
|
|
11
12
|
class Processor
|
12
13
|
def self.call_command(method_name, message, opts)
|
@@ -30,7 +31,8 @@ Mimi::Messaging.configure(
|
|
30
31
|
mq_aws_secret_access_key: AWS_SECRET_ACCESS_KEY,
|
31
32
|
mq_aws_region: AWS_REGION,
|
32
33
|
mq_aws_sqs_endpoint: AWS_SQS_ENDPOINT_URL,
|
33
|
-
mq_aws_sns_endpoint: AWS_SNS_ENDPOINT_URL
|
34
|
+
mq_aws_sns_endpoint: AWS_SNS_ENDPOINT_URL,
|
35
|
+
mq_aws_sqs_sns_kms_master_key_id: AWS_SQS_SNS_KMS_MASTER_KEY_ID
|
34
36
|
)
|
35
37
|
adapter = Mimi::Messaging.adapter
|
36
38
|
queue_name = "test"
|
@@ -47,4 +49,3 @@ ensure
|
|
47
49
|
puts "Stopping adapter"
|
48
50
|
adapter.stop
|
49
51
|
end
|
50
|
-
|
@@ -56,7 +56,8 @@ module Mimi
|
|
56
56
|
mq_aws_sqs_endpoint: nil,
|
57
57
|
mq_aws_sns_endpoint: nil,
|
58
58
|
|
59
|
-
|
59
|
+
mq_aws_sqs_sns_kms_master_key_id: nil,
|
60
|
+
mq_aws_sqs_read_timeout: 20, # seconds
|
60
61
|
}.freeze
|
61
62
|
|
62
63
|
# Initializes SQS/SNS adapter
|
@@ -93,6 +94,7 @@ module Mimi
|
|
93
94
|
# for processors.
|
94
95
|
#
|
95
96
|
def stop_all_processors
|
97
|
+
@consumers&.each(&:signal_stop)
|
96
98
|
@consumers&.each(&:stop)
|
97
99
|
@consumers = nil
|
98
100
|
@reply_consumer&.stop
|
@@ -227,13 +229,16 @@ module Mimi
|
|
227
229
|
def create_queue(queue_name)
|
228
230
|
fqn = sqs_sns_converted_full_name(queue_name)
|
229
231
|
Mimi::Messaging.log "Creating a queue: #{fqn}"
|
230
|
-
|
232
|
+
attrs = {}
|
233
|
+
if options[:mq_aws_sqs_sns_kms_master_key_id]
|
234
|
+
attrs["KmsMasterKeyId"] = options[:mq_aws_sqs_sns_kms_master_key_id]
|
235
|
+
end
|
236
|
+
result = sqs_client.create_queue(queue_name: fqn, attributes: attrs)
|
231
237
|
result.queue_url
|
232
238
|
rescue StandardError => e
|
233
239
|
raise Mimi::Messaging::ConnectionError, "Failed to create queue '#{queue_name}': #{e}"
|
234
240
|
end
|
235
241
|
|
236
|
-
|
237
242
|
# Finds a queue URL for a queue with given name.
|
238
243
|
#
|
239
244
|
# If an existing queue with this name is not found,
|
@@ -315,6 +320,7 @@ module Mimi
|
|
315
320
|
unless message.is_a?(Mimi::Messaging::Message)
|
316
321
|
raise ArgumentError, "Message is expected as argument"
|
317
322
|
end
|
323
|
+
|
318
324
|
Mimi::Messaging.log "Delivering message to: #{queue_url}, headers: #{message.headers}"
|
319
325
|
sqs_client.send_message(
|
320
326
|
queue_url: queue_url,
|
@@ -479,7 +485,11 @@ module Mimi
|
|
479
485
|
def create_topic(topic_name)
|
480
486
|
fqn = sqs_sns_converted_full_name(topic_name)
|
481
487
|
Mimi::Messaging.log "Creating a topic: #{fqn}"
|
482
|
-
|
488
|
+
attrs = {}
|
489
|
+
if options[:mq_aws_sqs_sns_kms_master_key_id]
|
490
|
+
attrs["KmsMasterKeyId"] = options[:mq_aws_sqs_sns_kms_master_key_id]
|
491
|
+
end
|
492
|
+
result = sns_client.create_topic(name: fqn, attributes: attrs)
|
483
493
|
result.topic_arn
|
484
494
|
rescue StandardError => e
|
485
495
|
raise Mimi::Messaging::ConnectionError, "Failed to create topic '#{topic_name}': #{e}"
|
@@ -496,7 +506,7 @@ module Mimi
|
|
496
506
|
)
|
497
507
|
queue_arn = result.attributes["QueueArn"]
|
498
508
|
Mimi::Messaging.log "Subscribing queue to a topic: '#{topic_arn}'->'#{queue_url}'"
|
499
|
-
|
509
|
+
_result = sns_client.subscribe(
|
500
510
|
topic_arn: topic_arn,
|
501
511
|
protocol: "sqs",
|
502
512
|
endpoint: queue_arn,
|
@@ -518,6 +528,7 @@ module Mimi
|
|
518
528
|
unless message.is_a?(Mimi::Messaging::Message)
|
519
529
|
raise ArgumentError, "Message is expected as argument"
|
520
530
|
end
|
531
|
+
|
521
532
|
Mimi::Messaging.log "Delivering message to: #{topic_arn}"
|
522
533
|
sns_client.publish(
|
523
534
|
topic_arn: topic_arn,
|
@@ -11,13 +11,21 @@ module Mimi
|
|
11
11
|
@stop_requested = false
|
12
12
|
Mimi::Messaging.log "Starting consumer for: #{queue_url}"
|
13
13
|
@consumer_thread = Thread.new do
|
14
|
-
while not @stop_requested
|
14
|
+
while not @stop_requested
|
15
15
|
read_and_process_message(adapter, queue_url, block)
|
16
16
|
end
|
17
17
|
Mimi::Messaging.log "Stopping consumer for: #{queue_url}"
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
# Requests the Consumer to stop, without actually waiting for it
|
22
|
+
#
|
23
|
+
def signal_stop
|
24
|
+
@stop_requested = true
|
25
|
+
end
|
26
|
+
|
27
|
+
# Requests the Consumer to stop AND waits until it does
|
28
|
+
#
|
21
29
|
def stop
|
22
30
|
@stop_requested = true
|
23
31
|
@consumer_thread.join
|
@@ -35,6 +43,7 @@ module Mimi
|
|
35
43
|
def read_and_process_message(adapter, queue_url, block)
|
36
44
|
message = read_message(adapter, queue_url)
|
37
45
|
return unless message
|
46
|
+
|
38
47
|
Mimi::Messaging.log "Read message from: #{queue_url}"
|
39
48
|
block.call(message)
|
40
49
|
ack_message(adapter, queue_url, message)
|
@@ -54,6 +63,7 @@ module Mimi
|
|
54
63
|
)
|
55
64
|
return nil if result.messages.count == 0
|
56
65
|
return result.messages.first if result.messages.count == 1
|
66
|
+
|
57
67
|
raise Mimi::Messaging::ConnectionError, "Unexpected number of messages read"
|
58
68
|
end
|
59
69
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mimi-messaging-sqs_sns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Kukushkin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mimi-messaging
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- ".gitignore"
|
125
125
|
- ".rspec"
|
126
126
|
- ".travis.yml"
|
127
|
+
- CHANGELOG.md
|
127
128
|
- CODE_OF_CONDUCT.md
|
128
129
|
- Gemfile
|
129
130
|
- LICENSE.txt
|
@@ -165,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
166
|
- !ruby/object:Gem::Version
|
166
167
|
version: '0'
|
167
168
|
requirements: []
|
168
|
-
rubygems_version: 3.
|
169
|
+
rubygems_version: 3.1.2
|
169
170
|
signing_key:
|
170
171
|
specification_version: 4
|
171
172
|
summary: AWS SQS/SNS adapter for mimi-messaging
|