mimi-messaging-sqs_sns 0.6.1 → 0.7.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 +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
|