eventq 2.0.0.rc1

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