class Basquiat::Adapters::RabbitMq::DeadLettering

Attributes

options[R]

Public Class Methods

new(session) click to toggle source
# File lib/basquiat/adapters/rabbitmq/requeue_strategies/dead_lettering.rb, line 28
def initialize(session)
  super
  setup_dead_lettering
end
session_options() click to toggle source
# File lib/basquiat/adapters/rabbitmq/requeue_strategies/dead_lettering.rb, line 23
def session_options
  options.fetch :session
end
setup(opts) click to toggle source
# File lib/basquiat/adapters/rabbitmq/requeue_strategies/dead_lettering.rb, line 10
def setup(opts)
  @options = {
    session: {
      queue: {
        options: {
          'x-dead-letter-exchange' => opts.fetch(:exchange, 'basquiat.dlx')
        }
      }
    },
    dlx:     { ttl: opts.fetch(:ttl, 1_000) }
  }
end

Public Instance Methods

run(message) { || ... } click to toggle source
# File lib/basquiat/adapters/rabbitmq/requeue_strategies/dead_lettering.rb, line 33
def run(message)
  catch :skip_processing do
    check_incoming_messages(message.props.headers)
    yield
  end
  public_send(message.action, message)
end

Private Instance Methods

check_incoming_messages(headers) click to toggle source
# File lib/basquiat/adapters/rabbitmq/requeue_strategies/dead_lettering.rb, line 43
def check_incoming_messages(headers)
  headers &&
    headers['x-death'][1]['queue'] != session.queue.name &&
    throw(:skip_processing)
end
options() click to toggle source
# File lib/basquiat/adapters/rabbitmq/requeue_strategies/dead_lettering.rb, line 49
def options
  self.class.options
end
setup_dead_lettering() click to toggle source
# File lib/basquiat/adapters/rabbitmq/requeue_strategies/dead_lettering.rb, line 53
def setup_dead_lettering
  dlx   = session.channel.topic('basquiat.dlx')
  queue = session.channel.queue('basquiat.dlq',
                                arguments: { 'x-dead-letter-exchange' => session.exchange.name,
                                             'x-message-ttl'          => options[:dlx][:ttl] })
  queue.bind(dlx, routing_key: '#')
end