eventq 2.1.3 → 2.2.0.rc1
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/lib/eventq.rb +1 -0
- data/lib/eventq/aws.rb +0 -18
- data/lib/eventq/base.rb +23 -0
- data/lib/eventq/eventq_aws/aws_subscription_manager.rb +22 -8
- data/lib/eventq/eventq_aws/sqs.rb +4 -4
- data/lib/eventq/eventq_base/exceptions.rb +1 -0
- data/lib/eventq/eventq_base/exceptions/event_type_not_found.rb +12 -0
- data/lib/eventq/eventq_base/exchange.rb +1 -0
- data/lib/eventq/eventq_base/queue.rb +5 -0
- data/lib/eventq/eventq_rabbitmq/rabbitmq_eventq_client.rb +1 -1
- data/lib/eventq/eventq_rabbitmq/rabbitmq_queue_manager.rb +8 -8
- data/lib/eventq/eventq_rabbitmq/rabbitmq_status_checker.rb +2 -2
- data/lib/eventq/queue_worker.rb +1 -1
- data/lib/eventq/rabbitmq.rb +2 -27
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fc23d23d17caae6127d95e44d06bf912708916788e5ddd8a4d7a9c6d7cb6804
|
4
|
+
data.tar.gz: bb48c0c4e39e4bd22b0a939f1517dec464aef1b70b770abc918b763259a0bc73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e733843db33486369179b19933ea3d30c503bb0d7a35f3ecfa36f338d1b13b88a8c79598cfc5b2e757793bfe963e29c9e60c3dea7d65fe2d7624b210160cac72
|
7
|
+
data.tar.gz: 3dc195c0c857189de331225056c0b5f396b51531d85dd4671c1e077c309d3aeb89d26da514b0c2cb6a7514baaae94e92777a91b13322eac02279806e5ec5e2bd
|
data/lib/eventq.rb
CHANGED
data/lib/eventq/aws.rb
CHANGED
@@ -12,23 +12,5 @@ require_relative './eventq_aws/aws_status_checker'
|
|
12
12
|
require_relative './eventq_aws/aws_queue_worker'
|
13
13
|
|
14
14
|
module EventQ
|
15
|
-
def self.namespace
|
16
|
-
@namespace
|
17
|
-
end
|
18
|
-
def self.namespace=(value)
|
19
|
-
@namespace = value
|
20
|
-
end
|
21
|
-
def self.create_event_type(event_type)
|
22
|
-
if EventQ.namespace == nil
|
23
|
-
return event_type
|
24
|
-
end
|
25
|
-
return "#{EventQ.namespace}-#{event_type}"
|
26
|
-
end
|
27
|
-
def self.create_queue_name(queue_name)
|
28
|
-
if EventQ.namespace == nil
|
29
|
-
return queue_name
|
30
|
-
end
|
31
|
-
return "#{EventQ.namespace}-#{queue_name}"
|
32
|
-
end
|
33
15
|
end
|
34
16
|
|
data/lib/eventq/base.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module EventQ
|
2
|
+
def self.namespace
|
3
|
+
@namespace
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.namespace=(value)
|
7
|
+
@namespace = value
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.create_event_type(event_type)
|
11
|
+
if EventQ.namespace == nil
|
12
|
+
return event_type
|
13
|
+
end
|
14
|
+
return "#{EventQ.namespace}-#{event_type}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.create_queue_name(queue)
|
18
|
+
return queue.name if EventQ.namespace == nil
|
19
|
+
|
20
|
+
delimiter = queue.namespace_delimiter || '-'
|
21
|
+
return "#{EventQ.namespace}#{delimiter}#{queue.name}"
|
22
|
+
end
|
23
|
+
end
|
@@ -13,18 +13,20 @@ module EventQ
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def subscribe(event_type, queue, topic_region = nil, queue_region = nil)
|
16
|
-
|
16
|
+
if queue.isolated
|
17
|
+
method = :get_topic_arn
|
18
|
+
else
|
19
|
+
method = :create_topic_arn
|
20
|
+
end
|
21
|
+
|
22
|
+
topic_arn = @client.sns_helper(topic_region).public_send(method, event_type, topic_region)
|
23
|
+
raise Exceptions::EventTypeNotFound, 'SNS topic not found, unable to subscribe' unless topic_arn
|
17
24
|
|
18
25
|
q = @manager.get_queue(queue)
|
19
26
|
queue_arn = @client.sqs_helper(queue_region).get_queue_arn(queue)
|
20
27
|
|
21
|
-
|
22
|
-
|
23
|
-
attributes:
|
24
|
-
{
|
25
|
-
'Policy' => queue_policy(queue_arn)
|
26
|
-
}
|
27
|
-
)
|
28
|
+
attributes = default_queue_attributes(q, queue_arn)
|
29
|
+
@client.sqs(queue_region).set_queue_attributes(attributes)
|
28
30
|
|
29
31
|
@client.sns(topic_region).subscribe(
|
30
32
|
topic_arn: topic_arn,
|
@@ -43,6 +45,18 @@ module EventQ
|
|
43
45
|
raise "[#{self.class}] - Not implemented. Please unsubscribe the queue from the topic inside the AWS Management Console."
|
44
46
|
end
|
45
47
|
|
48
|
+
private
|
49
|
+
|
50
|
+
def default_queue_attributes(queue, queue_arn)
|
51
|
+
{
|
52
|
+
queue_url: queue,
|
53
|
+
attributes:
|
54
|
+
{
|
55
|
+
'Policy' => queue_policy(queue_arn)
|
56
|
+
}
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
46
60
|
def queue_policy(queue_arn)
|
47
61
|
'{
|
48
62
|
"Version": "2012-10-17",
|
@@ -15,7 +15,7 @@ module EventQ
|
|
15
15
|
|
16
16
|
# Create a new queue.
|
17
17
|
def create_queue(queue, attributes = {})
|
18
|
-
_queue_name = EventQ.create_queue_name(queue
|
18
|
+
_queue_name = EventQ.create_queue_name(queue)
|
19
19
|
|
20
20
|
url = get_queue_url(queue)
|
21
21
|
unless url
|
@@ -50,7 +50,7 @@ module EventQ
|
|
50
50
|
# @param queue [EventQ::Queue]
|
51
51
|
# @return ARN [String]
|
52
52
|
def get_queue_arn(queue)
|
53
|
-
_queue_name = EventQ.create_queue_name(queue
|
53
|
+
_queue_name = EventQ.create_queue_name(queue)
|
54
54
|
|
55
55
|
arn = @@queue_arns[_queue_name]
|
56
56
|
unless arn
|
@@ -74,7 +74,7 @@ module EventQ
|
|
74
74
|
# @param queue [EventQ::Queue]
|
75
75
|
# @return URL [String]
|
76
76
|
def get_queue_url(queue)
|
77
|
-
_queue_name = EventQ.create_queue_name(queue
|
77
|
+
_queue_name = EventQ.create_queue_name(queue)
|
78
78
|
|
79
79
|
url = @@queue_urls[_queue_name]
|
80
80
|
unless url
|
@@ -97,7 +97,7 @@ module EventQ
|
|
97
97
|
q = get_queue_url(queue)
|
98
98
|
sqs.delete_queue(queue_url: q)
|
99
99
|
|
100
|
-
_queue_name = EventQ.create_queue_name(queue
|
100
|
+
_queue_name = EventQ.create_queue_name(queue)
|
101
101
|
@@queue_urls.delete(_queue_name)
|
102
102
|
@@queue_arns.delete(_queue_name)
|
103
103
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module EventQ
|
2
|
+
module Exceptions
|
3
|
+
# Error for when an event type is not found by the relevant adapters
|
4
|
+
# For AWS SNS that would be a Topic
|
5
|
+
# For RabbitMq that would be an Exchange.
|
6
|
+
class EventTypeNotFound < StandardError
|
7
|
+
def initialize(message)
|
8
|
+
super(message)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -11,6 +11,10 @@ module EventQ
|
|
11
11
|
attr_accessor :retry_delay
|
12
12
|
attr_accessor :retry_back_off_grace
|
13
13
|
attr_accessor :retry_back_off_weight
|
14
|
+
# Character delimiter between namespace and queue name. Default = '-'
|
15
|
+
attr_accessor :namespace_delimiter
|
16
|
+
# Flag to control that the queue runs in isolation of auto creating the topic it belongs to
|
17
|
+
attr_accessor :isolated
|
14
18
|
|
15
19
|
def initialize
|
16
20
|
@allow_retry = false
|
@@ -30,6 +34,7 @@ module EventQ
|
|
30
34
|
@retry_back_off_grace = 0
|
31
35
|
# Multiplier for the backoff retry in case retry_delay is too small
|
32
36
|
@retry_back_off_weight = 1
|
37
|
+
@isolated = false
|
33
38
|
end
|
34
39
|
end
|
35
40
|
end
|
@@ -81,7 +81,7 @@ module EventQ
|
|
81
81
|
delay_queue = @queue_manager.create_delay_queue(channel, queue, exchange.name, delay)
|
82
82
|
delay_queue.bind(delay_exchange, routing_key: _event_type)
|
83
83
|
|
84
|
-
_queue_name = EventQ.create_queue_name(queue
|
84
|
+
_queue_name = EventQ.create_queue_name(queue)
|
85
85
|
|
86
86
|
q = channel.queue(_queue_name, durable: @queue_manager.durable)
|
87
87
|
q.bind(exchange, routing_key: _event_type)
|
@@ -14,7 +14,7 @@ module EventQ
|
|
14
14
|
|
15
15
|
def get_queue(channel, queue)
|
16
16
|
|
17
|
-
_queue_name = EventQ.create_queue_name(queue
|
17
|
+
_queue_name = EventQ.create_queue_name(queue)
|
18
18
|
|
19
19
|
# get/create the queue
|
20
20
|
q = channel.queue(_queue_name, :durable => @durable)
|
@@ -41,29 +41,29 @@ module EventQ
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def get_queue_exchange(channel, queue)
|
44
|
-
_exchange_name = EventQ.create_exchange_name(queue
|
44
|
+
_exchange_name = EventQ.create_exchange_name(queue)
|
45
45
|
channel.fanout("#{_exchange_name}.ex")
|
46
46
|
end
|
47
47
|
|
48
48
|
def get_retry_exchange(channel, queue)
|
49
|
-
_queue_name = EventQ.create_queue_name(queue
|
49
|
+
_queue_name = EventQ.create_queue_name(queue)
|
50
50
|
return channel.fanout("#{_queue_name}.r.ex")
|
51
51
|
end
|
52
52
|
|
53
53
|
def get_subscriber_exchange(channel, queue)
|
54
|
-
_queue_name = EventQ.create_queue_name(queue
|
54
|
+
_queue_name = EventQ.create_queue_name(queue)
|
55
55
|
return channel.fanout("#{_queue_name}.ex")
|
56
56
|
end
|
57
57
|
|
58
58
|
def get_delay_exchange(channel, queue, delay)
|
59
|
-
_queue_name = EventQ.create_queue_name(queue
|
59
|
+
_queue_name = EventQ.create_queue_name(queue)
|
60
60
|
channel.direct("#{_queue_name}.#{delay}.d.ex")
|
61
61
|
end
|
62
62
|
|
63
63
|
def get_retry_queue(channel, queue)
|
64
64
|
subscriber_exchange = get_subscriber_exchange(channel, queue)
|
65
65
|
|
66
|
-
_queue_name = EventQ.create_queue_name(queue
|
66
|
+
_queue_name = EventQ.create_queue_name(queue)
|
67
67
|
|
68
68
|
if queue.allow_retry_back_off == true
|
69
69
|
|
@@ -82,13 +82,13 @@ module EventQ
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def create_delay_queue(channel, queue, dlx_name, delay=0)
|
85
|
-
queue_name = EventQ.create_queue_name(queue
|
85
|
+
queue_name = EventQ.create_queue_name(queue)
|
86
86
|
channel.queue("#{queue_name}.#{delay}.delay", durable: @durable,
|
87
87
|
arguments: { X_DEAD_LETTER_EXCHANGE => dlx_name, X_MESSAGE_TTL => delay * 1000 })
|
88
88
|
end
|
89
89
|
|
90
90
|
def get_exchange(channel, exchange)
|
91
|
-
_exchange_name = EventQ.create_exchange_name(exchange
|
91
|
+
_exchange_name = EventQ.create_exchange_name(exchange)
|
92
92
|
return channel.direct(_exchange_name, :durable => @durable)
|
93
93
|
end
|
94
94
|
end
|
@@ -27,7 +27,7 @@ module EventQ
|
|
27
27
|
begin
|
28
28
|
connection = @client.get_connection
|
29
29
|
channel = connection.create_channel
|
30
|
-
_queue_name = EventQ.create_queue_name(queue
|
30
|
+
_queue_name = EventQ.create_queue_name(queue)
|
31
31
|
channel.queue(_queue_name, :durable => true)
|
32
32
|
rescue
|
33
33
|
outcome = false
|
@@ -59,4 +59,4 @@ module EventQ
|
|
59
59
|
|
60
60
|
end
|
61
61
|
end
|
62
|
-
end
|
62
|
+
end
|
data/lib/eventq/queue_worker.rb
CHANGED
@@ -30,7 +30,7 @@ module EventQ
|
|
30
30
|
configure(queue, options)
|
31
31
|
worker_adapter.configure(options)
|
32
32
|
|
33
|
-
queue_name = EventQ.create_queue_name(queue
|
33
|
+
queue_name = EventQ.create_queue_name(queue)
|
34
34
|
EventQ.logger.info("[#{self.class}] - Listening for messages on queue: #{queue_name}}")
|
35
35
|
|
36
36
|
# Allow the worker to be started on a thread or on the main process.
|
data/lib/eventq/rabbitmq.rb
CHANGED
@@ -1,41 +1,16 @@
|
|
1
|
-
# require 'eventq_base'
|
2
|
-
|
3
1
|
require 'bunny'
|
4
2
|
|
5
3
|
require 'hash_kit'
|
6
4
|
require_relative './eventq_rabbitmq/rabbitmq_queue_client'
|
7
5
|
require_relative './eventq_rabbitmq/rabbitmq_queue_manager'
|
8
|
-
|
9
6
|
require_relative './eventq_rabbitmq/rabbitmq_queue_worker'
|
10
|
-
|
11
7
|
require_relative './eventq_rabbitmq/rabbitmq_subscription_manager'
|
12
8
|
require_relative './eventq_rabbitmq/rabbitmq_eventq_client'
|
13
9
|
require_relative './eventq_rabbitmq/default_queue'
|
14
10
|
require_relative './eventq_rabbitmq/rabbitmq_status_checker'
|
15
11
|
|
16
12
|
module EventQ
|
17
|
-
def self.
|
18
|
-
|
19
|
-
end
|
20
|
-
def self.namespace=(value)
|
21
|
-
@namespace = value
|
22
|
-
end
|
23
|
-
def self.create_event_type(event_type)
|
24
|
-
if EventQ.namespace == nil
|
25
|
-
return event_type
|
26
|
-
end
|
27
|
-
return "#{EventQ.namespace}-#{event_type}"
|
28
|
-
end
|
29
|
-
def self.create_queue_name(queue_name)
|
30
|
-
if EventQ.namespace == nil
|
31
|
-
return queue_name
|
32
|
-
end
|
33
|
-
return "#{EventQ.namespace}-#{queue_name}"
|
34
|
-
end
|
35
|
-
def self.create_exchange_name(exchange_name)
|
36
|
-
if EventQ.namespace == nil
|
37
|
-
return exchange_name
|
38
|
-
end
|
39
|
-
return "#{EventQ.namespace}-#{exchange_name}"
|
13
|
+
def self.create_exchange_name(exchange)
|
14
|
+
create_queue_name(exchange)
|
40
15
|
end
|
41
16
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SageOne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -205,6 +205,7 @@ files:
|
|
205
205
|
- bin/setup
|
206
206
|
- lib/eventq.rb
|
207
207
|
- lib/eventq/aws.rb
|
208
|
+
- lib/eventq/base.rb
|
208
209
|
- lib/eventq/eventq_aws/aws_calculate_visibility_timeout.rb
|
209
210
|
- lib/eventq/eventq_aws/aws_eventq_client.rb
|
210
211
|
- lib/eventq/eventq_aws/aws_queue_client.rb
|
@@ -220,6 +221,7 @@ files:
|
|
220
221
|
- lib/eventq/eventq_base/eventq_client_contract.rb
|
221
222
|
- lib/eventq/eventq_base/eventq_logger.rb
|
222
223
|
- lib/eventq/eventq_base/exceptions.rb
|
224
|
+
- lib/eventq/eventq_base/exceptions/event_type_not_found.rb
|
223
225
|
- lib/eventq/eventq_base/exceptions/invalid_signature_exception.rb
|
224
226
|
- lib/eventq/eventq_base/exceptions/worker_thread_error.rb
|
225
227
|
- lib/eventq/eventq_base/exchange.rb
|
@@ -262,11 +264,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
264
|
version: '0'
|
263
265
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
266
|
requirements:
|
265
|
-
- - "
|
267
|
+
- - ">"
|
266
268
|
- !ruby/object:Gem::Version
|
267
|
-
version:
|
269
|
+
version: 1.3.1
|
268
270
|
requirements: []
|
269
|
-
rubygems_version: 3.0.
|
271
|
+
rubygems_version: 3.0.3
|
270
272
|
signing_key:
|
271
273
|
specification_version: 4
|
272
274
|
summary: EventQ is a pub/sub system that uses async notifications and message queues
|