class BetterSqs::Client
A class that wraps the aws sdk v2 SQS client to reduce interface complexity
Attributes
Public Class Methods
# File lib/better_sqs/client.rb, line 7 def initialize # if BetterSqs has not been configured then run the default configuration BetterSqs.configure unless BetterSqs.configured? end
Public Instance Methods
Updates the message visibility timeout to create some delay before an attempt will be made to reprocess the
message
@param message [Messages::Sqs] the message for which the next retry should be delayed
# File lib/better_sqs/client.rb, line 43 def defer_retry(message) sqs.change_message_visibility queue_url: url_for_queue(message.queue), receipt_handle: message.receipt_handle, visibility_timeout: BetterSqs.configuration.sqs_message_deferral_seconds end
Delete a message from the queue
@param message [Messages::Sqs] the message that should be deleted
# File lib/better_sqs/client.rb, line 35 def delete(message) sqs.delete_message queue_url: url_for_queue(message.queue), receipt_handle: message.receipt_handle end
Push a message onto a queue
@param queue_name [String, Symbol] the name of the queue that the message should pushed onto @param message_body [String] the message as it will be pushed onto the queue, no serialization occurs as
part of this method. You need to encode or serialize your object to a string before sending it to this method
@return [Types::SendMessageResult] the sent message object returned from s3
# File lib/better_sqs/client.rb, line 18 def push(queue_name, message_body) sqs.send_message(queue_url: url_for_queue(queue_name), message_body: message_body) end
Get a BetterSqs::Queue
instance
@param queue_name [String, Symbol] the name of the SQS queue @return [BetterSqs::Queue] the requested Queue
instance
# File lib/better_sqs/client.rb, line 68 def queue(queue_name) Queue.new self, queue_name end
Reserve a message from the specified queue
@param queue_name [String, Symbol] the name of the SQS queue to reserve a message from @return [Messages::Sqs, NilClass] the message retrieved from the queue
# File lib/better_sqs/client.rb, line 26 def reserve(queue_name) resp = sqs.receive_message(queue_url: url_for_queue(queue_name), max_number_of_messages: 1) return nil unless resp.messages.any? Message.new queue_client: self, queue: queue_name, sqs_message: resp.messages.first end
Get the specified queue instance if it already exists, otherwise create it and wait for it to be readied
@param queue_name [String, Symbol] the name of the queue to be created @return [AWS::SQS::Queue] the requested queue instance
# File lib/better_sqs/client.rb, line 60 def url_for_queue(queue_name) sqs.create_queue(queue_name: queue_name).queue_url end