Exception: BugBunny::PublishUnroutable

Inherits:
Error
  • Object
show all
Defined in:
lib/bug_bunny/exception.rb

Overview

Error lanzado cuando el broker retorna un mensaje publicado con ‘mandatory: true` que no pudo rutearse a ninguna cola en modo `:confirmed`.

Un return implica que el publish llegó al broker pero ninguna binding aceptó la routing key — el mensaje se considera no entregado desde la perspectiva del publisher. Espejo simétrico de PublishNacked pero para la señal ‘basic.return` en lugar de `basic.nack`.

Se levanta por default desde BugBunny::Producer#confirmed cuando el request tiene ‘mandatory: true`. Para opt-out, configurar `BugBunny.configuration.return_raise = false` o pasar `return_raise: false` por request. El callback `BugBunny.configuration.on_return` se sigue invocando antes del raise (orden: registro interno → user_cb → raise en el caller).

Examples:

rescue BugBunny::PublishUnroutable => e
  e.path           # => 'acct.start'
  e.exchange       # => 'acct_x'
  e.routing_key    # => 'acct.unbound'
  e.reply_code     # => 312
  e.reply_text     # => 'NO_ROUTE'
  e.correlation_id # => 'corr-uuid-...'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path:, exchange:, routing_key:, reply_code: nil, reply_text: nil, correlation_id: nil) ⇒ PublishUnroutable

rubocop:disable Metrics/ParameterLists

Parameters:

  • path (String)

    Ruta lógica del request (ej: ‘acct.start’).

  • exchange (String)

    Nombre del exchange destino.

  • routing_key (String)

    Routing key del publish.

  • reply_code (Integer, nil) (defaults to: nil)

    Código AMQP del return.

  • reply_text (String, nil) (defaults to: nil)

    Texto del return.

  • correlation_id (String, nil) (defaults to: nil)

    Correlation ID del mensaje retornado.



101
102
103
104
105
106
107
108
109
110
# File 'lib/bug_bunny/exception.rb', line 101

def initialize(path:, exchange:, routing_key:, reply_code: nil, reply_text: nil, correlation_id: nil)
  @path = path
  @exchange = exchange
  @routing_key = routing_key
  @reply_code = reply_code
  @reply_text = reply_text
  @correlation_id = correlation_id
  super("broker returned unroutable message on path=#{path} exchange=#{exchange} " \
        "routing_key=#{routing_key} reply_code=#{reply_code} reply_text=#{reply_text}")
end

Instance Attribute Details

#correlation_idString? (readonly)

Returns Correlation ID del request retornado.

Returns:

  • (String, nil)

    Correlation ID del request retornado.



92
93
94
# File 'lib/bug_bunny/exception.rb', line 92

def correlation_id
  @correlation_id
end

#exchangeString (readonly)

Returns Nombre del exchange destino.

Returns:

  • (String)

    Nombre del exchange destino.



80
81
82
# File 'lib/bug_bunny/exception.rb', line 80

def exchange
  @exchange
end

#pathString (readonly)

Returns Ruta lógica del request cuyo publish fue retornado.

Returns:

  • (String)

    Ruta lógica del request cuyo publish fue retornado.



77
78
79
# File 'lib/bug_bunny/exception.rb', line 77

def path
  @path
end

#reply_codeInteger? (readonly)

Returns Código AMQP de la razón (ej: 312 = NO_ROUTE).

Returns:

  • (Integer, nil)

    Código AMQP de la razón (ej: 312 = NO_ROUTE).



86
87
88
# File 'lib/bug_bunny/exception.rb', line 86

def reply_code
  @reply_code
end

#reply_textString? (readonly)

Returns Texto humano-legible que describe la razón.

Returns:

  • (String, nil)

    Texto humano-legible que describe la razón.



89
90
91
# File 'lib/bug_bunny/exception.rb', line 89

def reply_text
  @reply_text
end

#routing_keyString (readonly)

Returns Routing key utilizada en el publish.

Returns:

  • (String)

    Routing key utilizada en el publish.



83
84
85
# File 'lib/bug_bunny/exception.rb', line 83

def routing_key
  @routing_key
end