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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ff7c42a020c9dcd1c69286c86121aa5c1479f7b7cb2338e46a257cab1826d8b
4
- data.tar.gz: b02d13924c3619d54ea0a5e8b75bb103457a6001550608d739a9f257e8ad87ef
3
+ metadata.gz: 4fc23d23d17caae6127d95e44d06bf912708916788e5ddd8a4d7a9c6d7cb6804
4
+ data.tar.gz: bb48c0c4e39e4bd22b0a939f1517dec464aef1b70b770abc918b763259a0bc73
5
5
  SHA512:
6
- metadata.gz: 07c73cb255746f3059981a488e19a81bee3a593eefda8db954ddc35f53b0f3803cd8da4dc27a4764b736b09f25eb19fea89136dfc25bd0612c4eb41851626391
7
- data.tar.gz: 48f78d71377237644e0bb0b28329a6f5dfa468e5b4c00700bf60d6798691e10eeb0978f435bc6ca88bc29ec57dc7b89995d9eb15a99512259c9c088dd6192713
6
+ metadata.gz: e733843db33486369179b19933ea3d30c503bb0d7a35f3ecfa36f338d1b13b88a8c79598cfc5b2e757793bfe963e29c9e60c3dea7d65fe2d7624b210160cac72
7
+ data.tar.gz: 3dc195c0c857189de331225056c0b5f396b51531d85dd4671c1e077c309d3aeb89d26da514b0c2cb6a7514baaae94e92777a91b13322eac02279806e5ec5e2bd
@@ -4,6 +4,7 @@ require 'class_kit'
4
4
  require 'hash_kit'
5
5
  require 'oj'
6
6
 
7
+ require_relative 'eventq/base'
7
8
  require_relative 'eventq/eventq_base/eventq_logger'
8
9
  require_relative 'eventq/eventq_base/queue'
9
10
  require_relative 'eventq/eventq_base/exchange'
@@ -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
 
@@ -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
- topic_arn = @client.sns_helper(topic_region).create_topic_arn(event_type, topic_region)
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
- @client.sqs(queue_region).set_queue_attributes(
22
- queue_url: q,
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.name)
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.name)
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.name)
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.name)
100
+ _queue_name = EventQ.create_queue_name(queue)
101
101
  @@queue_urls.delete(_queue_name)
102
102
  @@queue_arns.delete(_queue_name)
103
103
 
@@ -1,2 +1,3 @@
1
1
  require_relative 'exceptions/invalid_signature_exception'
2
2
  require_relative 'exceptions/worker_thread_error'
3
+ require_relative 'exceptions/event_type_not_found'
@@ -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
@@ -1,5 +1,6 @@
1
1
  module EventQ
2
2
  class Exchange
3
3
  attr_accessor :name
4
+ attr_accessor :namespace_delimiter
4
5
  end
5
6
  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.name)
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.name)
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.name)
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.name)
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.name)
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.name)
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.name)
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.name)
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.name)
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.name)
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
@@ -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.name)
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.
@@ -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.namespace
18
- @namespace
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.1.3
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-02-15 00:00:00.000000000 Z
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: '0'
269
+ version: 1.3.1
268
270
  requirements: []
269
- rubygems_version: 3.0.2
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