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.



117
118
119
120
121
122
123
124
125
126
# File 'lib/bug_bunny/exception.rb', line 117

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.



108
109
110
# File 'lib/bug_bunny/exception.rb', line 108

def correlation_id
  @correlation_id
end

#exchangeString (readonly)

Returns Nombre del exchange destino.

Returns:

  • (String)

    Nombre del exchange destino.



96
97
98
# File 'lib/bug_bunny/exception.rb', line 96

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.



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

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).



102
103
104
# File 'lib/bug_bunny/exception.rb', line 102

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.



105
106
107
# File 'lib/bug_bunny/exception.rb', line 105

def reply_text
  @reply_text
end

#routing_keyString (readonly)

Returns Routing key utilizada en el publish.

Returns:

  • (String)

    Routing key utilizada en el publish.



99
100
101
# File 'lib/bug_bunny/exception.rb', line 99

def routing_key
  @routing_key
end