eventq 2.0.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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +336 -0
  3. data/bin/console +14 -0
  4. data/bin/setup +8 -0
  5. data/lib/eventq/aws.rb +38 -0
  6. data/lib/eventq/eventq_aws/README.md +53 -0
  7. data/lib/eventq/eventq_aws/aws_eventq_client.rb +120 -0
  8. data/lib/eventq/eventq_aws/aws_queue_client.rb +64 -0
  9. data/lib/eventq/eventq_aws/aws_queue_manager.rb +68 -0
  10. data/lib/eventq/eventq_aws/aws_queue_worker.rb +168 -0
  11. data/lib/eventq/eventq_aws/aws_status_checker.rb +25 -0
  12. data/lib/eventq/eventq_aws/aws_subscription_manager.rb +65 -0
  13. data/lib/eventq/eventq_aws/jruby/aws_queue_worker.rb +370 -0
  14. data/lib/eventq/eventq_aws/sns.rb +64 -0
  15. data/lib/eventq/eventq_aws/sqs.rb +112 -0
  16. data/lib/eventq/eventq_base/configuration.rb +33 -0
  17. data/lib/eventq/eventq_base/event_raised_exchange.rb +7 -0
  18. data/lib/eventq/eventq_base/event_raised_queue.rb +7 -0
  19. data/lib/eventq/eventq_base/eventq_client_contract.rb +9 -0
  20. data/lib/eventq/eventq_base/eventq_logger.rb +28 -0
  21. data/lib/eventq/eventq_base/exceptions/invalid_signature_exception.rb +9 -0
  22. data/lib/eventq/eventq_base/exceptions/worker_thread_error.rb +10 -0
  23. data/lib/eventq/eventq_base/exceptions.rb +2 -0
  24. data/lib/eventq/eventq_base/exchange.rb +5 -0
  25. data/lib/eventq/eventq_base/message_args.rb +23 -0
  26. data/lib/eventq/eventq_base/nonce_manager.rb +57 -0
  27. data/lib/eventq/eventq_base/queue.rb +27 -0
  28. data/lib/eventq/eventq_base/queue_message.rb +31 -0
  29. data/lib/eventq/eventq_base/queue_worker_contract.rb +23 -0
  30. data/lib/eventq/eventq_base/serialization_providers/binary_serialization_provider.rb +15 -0
  31. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/array_writer.rb +20 -0
  32. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/attribute_writer.rb +24 -0
  33. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/class_writer.rb +20 -0
  34. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/date_time_writer.rb +33 -0
  35. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/date_writer.rb +22 -0
  36. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/hash_writer.rb +18 -0
  37. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/rational_writer.rb +20 -0
  38. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/serializer.rb +17 -0
  39. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/time_writer.rb +18 -0
  40. data/lib/eventq/eventq_base/serialization_providers/jruby/oj/value_writer.rb +16 -0
  41. data/lib/eventq/eventq_base/serialization_providers/jruby/oj.rb +10 -0
  42. data/lib/eventq/eventq_base/serialization_providers/jruby/oj_serialization_provider.rb +25 -0
  43. data/lib/eventq/eventq_base/serialization_providers/jruby.rb +2 -0
  44. data/lib/eventq/eventq_base/serialization_providers/json_serialization_provider.rb +28 -0
  45. data/lib/eventq/eventq_base/serialization_providers/oj_serialization_provider.rb +24 -0
  46. data/lib/eventq/eventq_base/serialization_providers.rb +36 -0
  47. data/lib/eventq/eventq_base/signature_providers/sha256_signature_provider.rb +31 -0
  48. data/lib/eventq/eventq_base/signature_providers.rb +44 -0
  49. data/lib/eventq/eventq_base/subscription_manager_contract.rb +13 -0
  50. data/lib/eventq/eventq_base/version.rb +3 -0
  51. data/lib/eventq/eventq_base/worker_id.rb +20 -0
  52. data/lib/eventq/eventq_rabbitmq/README.md +36 -0
  53. data/lib/eventq/eventq_rabbitmq/default_queue.rb +12 -0
  54. data/lib/eventq/eventq_rabbitmq/jruby/rabbitmq_queue_worker.rb +367 -0
  55. data/lib/eventq/eventq_rabbitmq/rabbitmq_eventq_client.rb +140 -0
  56. data/lib/eventq/eventq_rabbitmq/rabbitmq_queue_client.rb +54 -0
  57. data/lib/eventq/eventq_rabbitmq/rabbitmq_queue_manager.rb +104 -0
  58. data/lib/eventq/eventq_rabbitmq/rabbitmq_queue_worker.rb +168 -0
  59. data/lib/eventq/eventq_rabbitmq/rabbitmq_status_checker.rb +62 -0
  60. data/lib/eventq/eventq_rabbitmq/rabbitmq_subscription_manager.rb +54 -0
  61. data/lib/eventq/queue_worker.rb +241 -0
  62. data/lib/eventq/rabbitmq.rb +49 -0
  63. data/lib/eventq/worker_status.rb +64 -0
  64. data/lib/eventq.rb +25 -0
  65. metadata +289 -0
@@ -0,0 +1,241 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eventq/worker_status'
4
+
5
+ module EventQ
6
+ class QueueWorker
7
+ attr_accessor :is_running
8
+ attr_reader :worker_status, :worker_adapter
9
+
10
+ def initialize
11
+ @worker_status = EventQ::WorkerStatus.new
12
+ @is_running = false
13
+ @last_gc_flush = Time.now
14
+ @gc_flush_interval = 10
15
+ end
16
+
17
+ def start(queue, options = {}, &block)
18
+ EventQ.logger.info("[#{self.class}] - Preparing to start listening for messages.")
19
+
20
+ # Make sure mandatory options are specified
21
+ mandatory = [:worker_adapter, :client]
22
+ missing = mandatory - options.keys
23
+ raise "[#{self.class}] - Missing options. #{missing} must be specified." unless missing.empty?
24
+
25
+ @worker_adapter = options[:worker_adapter]
26
+ worker_adapter.context = self
27
+
28
+ raise "[#{self.class}] - Worker is already running." if running?
29
+
30
+ configure(queue, options)
31
+ worker_adapter.configure(options)
32
+
33
+ queue_name = EventQ.create_queue_name(queue.name)
34
+ EventQ.logger.info("[#{self.class}] - Listening for messages on queue: #{queue_name}}")
35
+
36
+ # Allow the worker to be started on a thread or on the main process.
37
+ # Using the thread won't block the parent process, whereas starting on the main process will.
38
+ if @block_process
39
+ start_worker(block, options, queue)
40
+ else
41
+ Thread.new { start_worker(block, options, queue) }
42
+ end
43
+ @is_running = true
44
+ end
45
+
46
+ def start_worker(block, options, queue)
47
+ if @fork_count > 0
48
+ @fork_count.times do
49
+ pid = fork do
50
+ start_process(options, queue, block)
51
+ end
52
+ # For the parent worker to know about the list of PIDS of the forks, we have to track them after the fork
53
+ # is created. In a fork the collection would be copied and there is no shared reference between processes.
54
+ # So each fork gets its own copy of the @worker_status variable.
55
+ track_process(pid)
56
+ end
57
+
58
+ Process.waitall
59
+ else
60
+ # No need to track process/threads separately as we are in the main parent process,
61
+ # and the logic inside start_process will handle it correctly.
62
+ start_process(options, queue, block)
63
+ end
64
+ end
65
+
66
+ def start_process(options, queue, block)
67
+ %w'INT TERM'.each do |sig|
68
+ Signal.trap(sig) {
69
+ stop
70
+ exit
71
+ }
72
+ end
73
+
74
+ # need to set it again since we might be in a fork.
75
+ @is_running = true
76
+ tracker = track_process(Process.pid)
77
+
78
+ # Execute any specific adapter worker logic before the threads are launched.
79
+ # This could range from setting instance variables, extra options, etc.
80
+ worker_adapter.pre_process(self, options)
81
+
82
+ if @thread_count > 0
83
+ @thread_count.times do
84
+ thr = Thread.new do
85
+ start_thread(queue, options, block)
86
+ end
87
+
88
+ # Allow the thread to kill the parent process if an error occurs
89
+ thr.abort_on_exception = true
90
+ track_thread(tracker, thr)
91
+ end
92
+ else
93
+ start_thread(queue, options, block)
94
+ end
95
+
96
+ # Only on the main process should you be able to not wait on a thread, otherwise
97
+ # any forked process will just immediately quit
98
+ unless options[:wait] == false && options[:fork_count] == 0
99
+ worker_status.threads.each { |thr| thr.thread.join }
100
+ end
101
+ end
102
+
103
+ def start_thread(queue, options, block)
104
+ worker_adapter.thread_process_iteration(queue, options, block)
105
+ rescue Exception => e # rubocop:disable Lint/RescueException
106
+ EventQ.logger.error(e)
107
+ call_on_error_block(error: e, message: e.message)
108
+ raise Exceptions::WorkerThreadError, e.message, e.backtrace
109
+ end
110
+
111
+ def stop
112
+ EventQ.logger.info("[#{self.class}] - Stopping.")
113
+ @is_running = false
114
+ # Need to notify all processes(forks) to stop as well.
115
+ worker_status.pids.each do |pid|
116
+ begin
117
+ Process.kill('TERM', pid) if Process.pid != pid
118
+ rescue Errno::ESRCH
119
+ # Continue on stopping if the process already died and can't be found.
120
+ end
121
+ end
122
+ end
123
+
124
+ def running?
125
+ @is_running
126
+ end
127
+
128
+ def deserialize_message(payload)
129
+ provider = @serialization_provider_manager.get_provider(EventQ::Configuration.serialization_provider)
130
+ provider.deserialize(payload)
131
+ end
132
+
133
+ def serialize_message(msg)
134
+ provider = @serialization_provider_manager.get_provider(EventQ::Configuration.serialization_provider)
135
+ provider.serialize(msg)
136
+ end
137
+
138
+ def gc_flush
139
+ if Time.now - last_gc_flush > @gc_flush_interval
140
+ GC.start
141
+ @last_gc_flush = Time.now
142
+ end
143
+ end
144
+
145
+ def last_gc_flush
146
+ @last_gc_flush
147
+ end
148
+
149
+ def configure(queue, options = {})
150
+ # default thread count
151
+ @thread_count = 1
152
+ if options.key?(:thread_count)
153
+ @thread_count = options[:thread_count] if options[:thread_count] > 0
154
+ end
155
+
156
+ # default sleep time in seconds
157
+ @sleep = 0
158
+ if options.key?(:sleep)
159
+ EventQ.logger.warn("[#{self.class}] - :sleep is deprecated.")
160
+ end
161
+
162
+ @fork_count = 0
163
+ if options.key?(:fork_count)
164
+ @fork_count = options[:fork_count]
165
+ end
166
+
167
+ if options.key?(:gc_flush_interval)
168
+ @gc_flush_interval = options[:gc_flush_interval]
169
+ end
170
+
171
+ # The default is to block the process where the worker starts.
172
+ # You may not want it to block if an application needs to run multiple things at the same time.
173
+ # Example: Running a background worker and a web service on the same application.
174
+ @block_process = true
175
+ if options.key?(:block_process)
176
+ @block_process = options[:block_process]
177
+ end
178
+
179
+ message_list = [
180
+ "Process Count: #{@fork_count}",
181
+ "Thread Count: #{@thread_count}",
182
+ "Interval Sleep: #{@sleep}",
183
+ "GC Flush Interval: #{@gc_flush_interval}",
184
+ "Block process: #{@block_process}"
185
+ ]
186
+ EventQ.logger.info("[#{self.class}] - Configuring. #{message_list.join(' | ')}")
187
+ end
188
+
189
+ def on_retry_exceeded(&block)
190
+ @on_retry_exceeded_block = block
191
+ end
192
+
193
+ def on_retry(&block)
194
+ @on_retry_block = block
195
+ end
196
+
197
+ def on_error(&block)
198
+ @on_error_block = block
199
+ end
200
+
201
+ def call_on_error_block(error:, message: nil)
202
+ call_block(:on_error_block, error, message)
203
+ end
204
+
205
+ def call_on_retry_exceeded_block(message)
206
+ call_block(:on_retry_exceeded_block, message)
207
+ end
208
+
209
+ def call_on_retry_block(message)
210
+ call_block(:on_retry_block, message)
211
+ end
212
+
213
+ private
214
+
215
+ def call_block(block_name, *args)
216
+ block_variable = "@#{block_name}"
217
+ if instance_variable_get(block_variable)
218
+ EventQ.logger.debug { "[#{self.class}] - Executing #{block_variable}." }
219
+ begin
220
+ instance_variable_get(block_variable).call(*args)
221
+ rescue => e
222
+ EventQ.logger.error("[#{self.class}] - An error occurred executing the #{block_variable}. Error: #{e}")
223
+ end
224
+ else
225
+ EventQ.logger.debug { "[#{self.class}] - No #{block_variable} specified." }
226
+ end
227
+ end
228
+
229
+ def track_process(pid)
230
+ tracker = EventQ::WorkerProcess.new(pid)
231
+ worker_status.processes.push(tracker)
232
+ tracker
233
+ end
234
+
235
+ def track_thread(process_tracker, thread)
236
+ tracker = EventQ::WorkerThread.new(thread)
237
+ process_tracker.threads.push(tracker)
238
+ tracker
239
+ end
240
+ end
241
+ end
@@ -0,0 +1,49 @@
1
+ # require 'eventq_base'
2
+
3
+ if RUBY_PLATFORM =~ /java/
4
+ require 'march_hare'
5
+ else
6
+ require 'bunny'
7
+ end
8
+
9
+ require 'hash_kit'
10
+ require_relative './eventq_rabbitmq/rabbitmq_queue_client'
11
+ require_relative './eventq_rabbitmq/rabbitmq_queue_manager'
12
+
13
+ if RUBY_PLATFORM =~ /java/
14
+ require_relative './eventq_rabbitmq/jruby/rabbitmq_queue_worker'
15
+ else
16
+ require_relative './eventq_rabbitmq/rabbitmq_queue_worker'
17
+ end
18
+
19
+ require_relative './eventq_rabbitmq/rabbitmq_subscription_manager'
20
+ require_relative './eventq_rabbitmq/rabbitmq_eventq_client'
21
+ require_relative './eventq_rabbitmq/default_queue'
22
+ require_relative './eventq_rabbitmq/rabbitmq_status_checker'
23
+
24
+ module EventQ
25
+ def self.namespace
26
+ @namespace
27
+ end
28
+ def self.namespace=(value)
29
+ @namespace = value
30
+ end
31
+ def self.create_event_type(event_type)
32
+ if EventQ.namespace == nil
33
+ return event_type
34
+ end
35
+ return "#{EventQ.namespace}-#{event_type}"
36
+ end
37
+ def self.create_queue_name(queue_name)
38
+ if EventQ.namespace == nil
39
+ return queue_name
40
+ end
41
+ return "#{EventQ.namespace}-#{queue_name}"
42
+ end
43
+ def self.create_exchange_name(exchange_name)
44
+ if EventQ.namespace == nil
45
+ return exchange_name
46
+ end
47
+ return "#{EventQ.namespace}-#{exchange_name}"
48
+ end
49
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'concurrent'
4
+
5
+ module EventQ
6
+ # Class used to represent the main worker status and the collection of forked worker processes.
7
+ # The main worker process will not have access to a forks collection of processes and threads.
8
+ # This is due to forks getting a copy of the process memory space and there is no such thing as shared resources
9
+ # between child processes and the parent process. Without implementing a need using inter process communication with
10
+ # IO::Pipe, only the PID is of any use for the parent process.
11
+ # To summarize, if using forks, the parent process will only have a collection of PIDS and not any threads
12
+ # associated with those PIDS.
13
+ class WorkerStatus
14
+
15
+ # List of WorkerProcess
16
+ attr_reader :processes
17
+
18
+ def initialize
19
+ @processes = Concurrent::Array.new
20
+ end
21
+
22
+ # Retrieve a simple list of all PIDS.
23
+ def pids
24
+ list = []
25
+ @processes.each do |p|
26
+ list.push(p.pid)
27
+ end
28
+ list
29
+ end
30
+
31
+ # Retrieve a simple list of all threads.
32
+ # Important Note: The list of threads is only relevant to the current process.
33
+ def threads
34
+ list = []
35
+ @processes.each do |p|
36
+ p.threads.each do |t|
37
+ list.push(t)
38
+ end
39
+ end
40
+
41
+ list
42
+ end
43
+ end
44
+
45
+ # Class that is used to represent a process and its associated threads.
46
+ class WorkerProcess
47
+ attr_accessor :pid
48
+ attr_reader :threads
49
+ def initialize(pid)
50
+ self.pid = pid
51
+ @threads = Concurrent::Array.new
52
+ end
53
+ end
54
+
55
+ class WorkerThread
56
+ # This could be a string or a Thread object.
57
+ # When spawning forked workers, threads cannot be marshalled back to another process.
58
+ attr_reader :thread
59
+
60
+ def initialize(thread)
61
+ @thread = thread
62
+ end
63
+ end
64
+ end
data/lib/eventq.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'securerandom'
2
+ require 'redlock'
3
+ require 'class_kit'
4
+ require 'hash_kit'
5
+
6
+ require_relative 'eventq/eventq_base/eventq_logger'
7
+ require_relative 'eventq/eventq_base/queue'
8
+ require_relative 'eventq/eventq_base/exchange'
9
+ require_relative 'eventq/eventq_base/queue_message'
10
+ require_relative 'eventq/eventq_base/message_args'
11
+ require_relative 'eventq/eventq_base/queue_worker_contract'
12
+ require_relative 'eventq/eventq_base/event_raised_exchange'
13
+ require_relative 'eventq/eventq_base/event_raised_queue'
14
+ require_relative 'eventq/eventq_base/subscription_manager_contract'
15
+ require_relative 'eventq/eventq_base/eventq_client_contract'
16
+ require_relative 'eventq/eventq_base/configuration'
17
+ require_relative 'eventq/eventq_base/serialization_providers'
18
+ require_relative 'eventq/eventq_base/worker_id'
19
+ require_relative 'eventq/eventq_base/nonce_manager'
20
+ require_relative 'eventq/eventq_base/signature_providers'
21
+ require_relative 'eventq/eventq_base/exceptions'
22
+ require_relative 'eventq/queue_worker'
23
+
24
+
25
+
metadata ADDED
@@ -0,0 +1,289 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eventq
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - SageOne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-07-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: shoulda-matchers
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: aws-sdk
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: class_kit
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: redlock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: openssl
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: concurrent-ruby
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: activesupport
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '4'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '4'
167
+ - !ruby/object:Gem::Dependency
168
+ name: oj
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: bunny
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ description: This is EventQ system
196
+ email:
197
+ - sageone@sage.com
198
+ executables: []
199
+ extensions: []
200
+ extra_rdoc_files: []
201
+ files:
202
+ - README.md
203
+ - bin/console
204
+ - bin/setup
205
+ - lib/eventq.rb
206
+ - lib/eventq/aws.rb
207
+ - lib/eventq/eventq_aws/README.md
208
+ - lib/eventq/eventq_aws/aws_eventq_client.rb
209
+ - lib/eventq/eventq_aws/aws_queue_client.rb
210
+ - lib/eventq/eventq_aws/aws_queue_manager.rb
211
+ - lib/eventq/eventq_aws/aws_queue_worker.rb
212
+ - lib/eventq/eventq_aws/aws_status_checker.rb
213
+ - lib/eventq/eventq_aws/aws_subscription_manager.rb
214
+ - lib/eventq/eventq_aws/jruby/aws_queue_worker.rb
215
+ - lib/eventq/eventq_aws/sns.rb
216
+ - lib/eventq/eventq_aws/sqs.rb
217
+ - lib/eventq/eventq_base/configuration.rb
218
+ - lib/eventq/eventq_base/event_raised_exchange.rb
219
+ - lib/eventq/eventq_base/event_raised_queue.rb
220
+ - lib/eventq/eventq_base/eventq_client_contract.rb
221
+ - lib/eventq/eventq_base/eventq_logger.rb
222
+ - lib/eventq/eventq_base/exceptions.rb
223
+ - lib/eventq/eventq_base/exceptions/invalid_signature_exception.rb
224
+ - lib/eventq/eventq_base/exceptions/worker_thread_error.rb
225
+ - lib/eventq/eventq_base/exchange.rb
226
+ - lib/eventq/eventq_base/message_args.rb
227
+ - lib/eventq/eventq_base/nonce_manager.rb
228
+ - lib/eventq/eventq_base/queue.rb
229
+ - lib/eventq/eventq_base/queue_message.rb
230
+ - lib/eventq/eventq_base/queue_worker_contract.rb
231
+ - lib/eventq/eventq_base/serialization_providers.rb
232
+ - lib/eventq/eventq_base/serialization_providers/binary_serialization_provider.rb
233
+ - lib/eventq/eventq_base/serialization_providers/jruby.rb
234
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj.rb
235
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/array_writer.rb
236
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/attribute_writer.rb
237
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/class_writer.rb
238
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/date_time_writer.rb
239
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/date_writer.rb
240
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/hash_writer.rb
241
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/rational_writer.rb
242
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/serializer.rb
243
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/time_writer.rb
244
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj/value_writer.rb
245
+ - lib/eventq/eventq_base/serialization_providers/jruby/oj_serialization_provider.rb
246
+ - lib/eventq/eventq_base/serialization_providers/json_serialization_provider.rb
247
+ - lib/eventq/eventq_base/serialization_providers/oj_serialization_provider.rb
248
+ - lib/eventq/eventq_base/signature_providers.rb
249
+ - lib/eventq/eventq_base/signature_providers/sha256_signature_provider.rb
250
+ - lib/eventq/eventq_base/subscription_manager_contract.rb
251
+ - lib/eventq/eventq_base/version.rb
252
+ - lib/eventq/eventq_base/worker_id.rb
253
+ - lib/eventq/eventq_rabbitmq/README.md
254
+ - lib/eventq/eventq_rabbitmq/default_queue.rb
255
+ - lib/eventq/eventq_rabbitmq/jruby/rabbitmq_queue_worker.rb
256
+ - lib/eventq/eventq_rabbitmq/rabbitmq_eventq_client.rb
257
+ - lib/eventq/eventq_rabbitmq/rabbitmq_queue_client.rb
258
+ - lib/eventq/eventq_rabbitmq/rabbitmq_queue_manager.rb
259
+ - lib/eventq/eventq_rabbitmq/rabbitmq_queue_worker.rb
260
+ - lib/eventq/eventq_rabbitmq/rabbitmq_status_checker.rb
261
+ - lib/eventq/eventq_rabbitmq/rabbitmq_subscription_manager.rb
262
+ - lib/eventq/queue_worker.rb
263
+ - lib/eventq/rabbitmq.rb
264
+ - lib/eventq/worker_status.rb
265
+ homepage: https://github.com/sage/eventq
266
+ licenses:
267
+ - MIT
268
+ metadata: {}
269
+ post_install_message:
270
+ rdoc_options: []
271
+ require_paths:
272
+ - lib
273
+ required_ruby_version: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - ">="
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ required_rubygems_version: !ruby/object:Gem::Requirement
279
+ requirements:
280
+ - - ">"
281
+ - !ruby/object:Gem::Version
282
+ version: 1.3.1
283
+ requirements: []
284
+ rubyforge_project:
285
+ rubygems_version: 2.7.7
286
+ signing_key:
287
+ specification_version: 4
288
+ summary: This is EventQ system
289
+ test_files: []