class FastlyNsq::Message

Adapter to Nsq::Message. Provides convenience methods for interacting with a message. Delegates management methods to the Nsq::Message

Attributes

managed[R]

@return [Symbol] Message state. Returns nil if message has not been requeued or finished.

nsq_message[R]

@return [Nsq::Message] @see www.rubydoc.info/gems/nsq-ruby/Nsq/Message

raw_body[R]

@return [String] Nsq::Message body

to_s[R]

@return [String] Nsq::Message body

Public Class Methods

new(nsq_message) click to toggle source

@param nsq_message [Nsq::Message]

# File lib/fastly_nsq/message.rb, line 43
def initialize(nsq_message)
  @nsq_message = nsq_message
  @raw_body = nsq_message.body
end

Public Instance Methods

body() click to toggle source
# File lib/fastly_nsq/message.rb, line 56
def body
  @body ||= JSON.parse(raw_body)
end
data() click to toggle source
# File lib/fastly_nsq/message.rb, line 48
def data
  @data ||= body['data']
end
finish() click to toggle source

Finish an NSQ message

# File lib/fastly_nsq/message.rb, line 62
def finish
  return managed if managed

  @managed = :finished
  nsq_message.finish
end
meta() click to toggle source
# File lib/fastly_nsq/message.rb, line 52
def meta
  @meta ||= body['meta']
end
requeue(timeout = nil) click to toggle source

Requeue an NSQ Message If the timeout parameter or the caclulated backoff is greater than FastlyNsq.max_req_timeout, the max_req_timeout will be used to requeue the message. @param timeout [Integer] timeout in milliseconds

# File lib/fastly_nsq/message.rb, line 75
def requeue(timeout = nil)
  return managed if managed
  timeout ||= requeue_period

  timeout = [timeout, FastlyNsq.max_req_timeout].min

  @managed = :requeued
  nsq_message.requeue(timeout)
end

Private Instance Methods

requeue_period() click to toggle source
# File lib/fastly_nsq/message.rb, line 87
def requeue_period
  retry_count = [attempts, 30].min
  ((retry_count**4) + 45 + (rand(60) * (retry_count + 1))) * 1_000
end