eventq 2.1.3 → 2.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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