Class: DispatchRider::QueueServices::AwsSqs::SqsReceivedMessage

Inherits:
ReceivedMessage
  • Object
show all
Defined in:
lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb

Instance Attribute Summary collapse

Attributes inherited from ReceivedMessage

#item

Instance Method Summary collapse

Constructor Details

#initialize(message, raw_item, queue) ⇒ SqsReceivedMessage

Returns a new instance of SqsReceivedMessage.



7
8
9
10
11
# File 'lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb', line 7

def initialize(message, raw_item, queue)
  @total_timeout = queue.visibility_timeout
  @start_time = Time.now
  super(message, raw_item)
end

Instance Attribute Details

#start_timeObject (readonly)

Returns the value of attribute start_time.



5
6
7
# File 'lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb', line 5

def start_time
  @start_time
end

#total_timeoutObject (readonly)

Returns the value of attribute total_timeout.



5
6
7
# File 'lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb', line 5

def total_timeout
  @total_timeout
end

Instance Method Details

#extend_timeout(timeout) ⇒ Object

NOTE: Setting the visibility timeout resets the timeout to NOW and makes it visibility timeout this time Essentially resetting the timer on this message



15
16
17
18
19
20
# File 'lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb', line 15

def extend_timeout(timeout)
  item.visibility_timeout = timeout
  if timeout > 0
    @total_timeout = timeout + (Time.now - start_time).to_i
  end
end

#queue_nameObject



39
40
41
# File 'lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb', line 39

def queue_name
  queue.arn.split(':').last
end

#receive_countObject



31
32
33
# File 'lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb', line 31

def receive_count
  @item.approximate_receive_count
end

#return_to_queueObject

We effectively return the item to the queue by setting the visibility timeout to zero. The item should become immediately visible. The next receiver will reset the visibility to something appropriate



27
28
29
# File 'lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb', line 27

def return_to_queue
  extend_timeout(0)
end

#sent_atObject



35
36
37
# File 'lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb', line 35

def sent_at
  @item.sent_timestamp
end