conductor-oss/conductor · error · RuntimeException

Queue name is undefined

Error message

Queue name is undefined

What it means

Thrown as RuntimeException by getOrCreateQueue when the queue 'name' argument is empty (StringUtils.isEmpty). For a queue-typed URI the name is the queue identifier; RabbitMQ can declare a server-generated name only when name is null, but here empty is treated as a misconfiguration and rejected.

Source

Thrown at amqp/src/main/java/com/netflix/conductor/contribs/queue/amqp/AMQPObservableQueue.java:603

        return getOrCreateQueue(
                connectionType,
                settings.getQueueOrExchangeName(),
                settings.isDurable(),
                settings.isExclusive(),
                settings.autoDelete(),
                settings.getArguments());
    }

    private AMQP.Queue.DeclareOk getOrCreateQueue(
            ConnectionType connectionType,
            final String name,
            final boolean isDurable,
            final boolean isExclusive,
            final boolean autoDelete,
            final Map<String, Object> arguments)
            throws Exception {
        if (StringUtils.isEmpty(name)) {
            throw new RuntimeException("Queue name is undefined");
        }
        arguments.put(QUEUE_TYPE, settings.getQueueType());
        Channel chn = null;
        try {
            LOGGER.debug("Creating queue {}", name);
            chn =
                    amqpConnection.getOrCreateChannel(
                            connectionType, getSettings().getQueueOrExchangeName());
            return chn.queueDeclare(name, isDurable, isExclusive, autoDelete, arguments);
        } catch (final Exception e) {
            LOGGER.warn("Failed to create queue {}", name, e);
            throw e;
        } finally {
            if (chn != null) {
                try {
                    amqpConnection.returnChannel(connectionType, chn);
                } catch (Exception e) {
                    LOGGER.error("Failed to return the channel of {}. {}", connectionType, e);

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Ensure the amqp_queue URI has a non-empty queue name, e.g. amqp_queue:myQueue?durable=true.
  2. Confirm any ${queue.name} placeholder resolves to a non-empty value in the active profile.
  3. Log the resolved settings.getQueueOrExchangeName() at startup to catch the empty value early.

Example fix

// before
amqp_queue:?durable=true
// after
amqp_queue:conductor_events?durable=true
Defensive patterns

Strategy: validation

Validate before calling

import org.apache.commons.lang3.StringUtils;
String queueName = settings.getQueueOrExchangeName();
if (!useExchange && StringUtils.isBlank(queueName)) {
    throw new IllegalStateException(
        "AMQP queue URI must include a non-empty queue name; resolved URI=" + queueURI);
}

Prevention

When it happens

Trigger: A queue-typed AMQP URI whose name segment is empty (e.g. 'amqp_queue:?durable=true'), or settings.getQueueOrExchangeName() returned blank after URI parsing. Fires during getOrCreateQueue at observer build/startup.

Common situations: Property placeholder for the queue name left unresolved; URI typed as amqp_queue with the name accidentally removed; environment-specific config where the queue name variable is unset in one profile.

Related errors


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/1ebdd22c6589f14c. Report an issue: GitHub.