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
- Set `job.mode = "streaming"` in the env block of the job config
- If a bounded test run is needed, use the connector's E2E-testing bounded option instead of batch mode
- 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
- Always set `job.mode = "streaming"` in env when using the RabbitMQ source
- Remember `-e local` runs default batch unless job.mode overrides it
- Use the E2E bounded option only for test scenarios
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
- Cannot specify both ' ' and root-level ' '.
- [ ]: ' ' must be configured
- [ ]: ' ' must be configured and non-blank
- ' ' must be configured when ' ' is used
- Airtable source connector not support unbounded operation
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)