class EventQ::Amazon::EventQClient
Implements a general interface to raise an event EventQ::RabbitMq::EventQClient is the sister-class which does the same for RabbitMq
Public Class Methods
new(options)
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 7 def initialize(options) if options[:client] == nil raise ':client (QueueClient) must be specified.'.freeze end @client = options[:client] @serialization_manager = EventQ::SerializationProviders::Manager.new @signature_manager = EventQ::SignatureProviders::Manager.new #this array is used to record known event types @known_event_types = [] end
Public Instance Methods
new_message()
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 78 def new_message EventQ::QueueMessage.new end
publish(topic:, event:, context: {})
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 37 def publish(topic:, event:, context: {}) raise_event(topic, event, context) end
raise_event(event_type, event, context = {})
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 41 def raise_event(event_type, event, context = {}) register_event(event_type) with_prepared_message(event_type, event, context) do |message| response = @client.sns.publish( topic_arn: topic_arn(event_type), message: message, subject: event_type ) EventQ.logger.debug do "[#{self.class} #raise_event] - Published to SNS with topic_arn: #{topic_arn(event_type)} | event_type: #{event_type} | Message: #{message}" end response end end
raise_event_in_queue(event_type, event, queue, delay, context = {})
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 60 def raise_event_in_queue(event_type, event, queue, delay, context = {}) queue_url = @client.get_queue_url(queue) with_prepared_message(event_type, event, context) do |message| response = @client.sqs.send_message( queue_url: queue_url, message_body: sqs_message_body_for(message), delay_seconds: delay ) EventQ.logger.debug do "[#{self.class} #raise_event_in_queue] - Raised event to SQS queue: #{queue_url} | event_type: #{event_type} | Message: #{message}" end response end end
register_event(event_type)
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 27 def register_event(event_type) if registered?(event_type) return true end @client.create_topic_arn(event_type) @known_event_types << event_type true end
registered?(event_type)
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 23 def registered?(event_type) @known_event_types.include?(event_type) end
Private Instance Methods
serialized_message(queue_message)
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 105 def serialized_message(queue_message) serialization_provider = @serialization_manager.get_provider(EventQ::Configuration.serialization_provider) serialization_provider.serialize(queue_message) end
sqs_message_body_for(payload_message)
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 115 def sqs_message_body_for(payload_message) JSON.dump(EventQ::Amazon::QueueWorker::MESSAGE => payload_message) end
topic_arn(event_type)
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 111 def topic_arn(event_type) @client.get_topic_arn(event_type) end
with_prepared_message(event_type, event, context) { |message| ... }
click to toggle source
# File lib/eventq_aws/aws_eventq_client.rb, line 84 def with_prepared_message(event_type, event, context) qm = new_message qm.content = event qm.type = event_type qm.context = context qm.content_type = event.class.to_s if EventQ::Configuration.signature_secret != nil provider = @signature_manager.get_provider(EventQ::Configuration.signature_provider) qm.signature = provider.write(message: qm, secret: EventQ::Configuration.signature_secret) end message = serialized_message(qm) response = yield(message) EventQ.log(:debug, "[#{self.class}] - Raised event. Message: #{message} | Type: #{event_type}.") response.message_id end