apache/seatunnel · error · RabbitmqConnectorException

API-01

API-01

Error message

PluginName: %s, Message: not support batch job mode

What it means

RabbitmqSource.getBoundedness throws RabbitmqConnectorException(CONFIG_VALIDATION_FAILED) when the job mode is not STREAMING. The RabbitMQ source is streaming-only; it rejects batch jobs by checking jobContext.getJobMode() during boundedness resolution.

Solutions

  1. Set `job.mode = "streaming"` in the env block of the job config
  2. If a bounded test run is needed, use the connector's E2E-testing bounded option instead of batch mode
  3. Switch to a connector that supports batch mode if a one-shot read is required

Example fix

// before
env {
  job.mode = "BATCH"
}
source { RabbitMQ { ... } }
// after
env {
  job.mode = "STREAMING"
}
source { RabbitMQ { ... } }
Defensive patterns

Strategy: validation

Validate before calling

String mode = jobConfig.getOrDefault("job.mode", "batch");
if (!"streaming".equalsIgnoreCase(mode)) {
  throw new IllegalArgumentException("RabbitMQ source requires job.mode = streaming");
}

Try / catch

try {
  Boundedness b = source.getBoundedness();
} catch (RabbitmqConnectorException e) {
  if (e.getMessage() != null && e.getMessage().contains("not support batch job mode")) {
    System.err.println("Set job.mode = STREAMING in the env block");
  } else {
    throw e;
  }
}

Prevention

When it happens

Trigger: Submitting a SeaTunnel job with mode = BATCH (or default batch mode) that uses the RabbitMQ source; getBoundedness is called during job planning by the enumerator/validation logic.

Common situations: User runs `seatunnel.sh --config job.conf -e local` without `job.mode = "streaming"`; template configs default to batch; scheduled batch pipeline reused with RabbitMQ source added later.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/694d720eba331c20. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-connectors-v2/connector-rabbitmq/src/main/java/org/apache/seatunnel/connectors/seatunnel/rabbitmq/source/RabbitmqSource.java:103

                this.catalogTables.add(table);
                this.queueToTableMap.put(queueName, table);
            }
        } else if (hasSchema) {
            CatalogTable table = CatalogTableUtil.buildWithConfig(config);
            String queueName = config.get(RabbitmqBaseOptions.QUEUE_NAME);
            if (queueName == null) {
                queueName = rabbitmqConfig.getQueueName();
            }
            this.catalogTables.add(table);
            this.queueToTableMap.put(queueName, table);
        }
    }

    @Override
    public Boundedness getBoundedness() {
        if (jobContext != null && !JobMode.STREAMING.equals(jobContext.getJobMode())) {
            throw new RabbitmqConnectorException(
                    SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
                    String.format(
                            "PluginName: %s, Message: not support batch job mode",
                            getPluginName()));
        }
        return rabbitmqConfig.isForE2ETesting() ? Boundedness.BOUNDED : Boundedness.UNBOUNDED;
    }

    @Override
    public String getPluginName() {
        return "RabbitMQ";
    }

    @Override
    public List<CatalogTable> getProducedCatalogTables() {
        return catalogTables;
    }

View on GitHub (pinned to cf67b549a7)