apache/seatunnel · error · RabbitmqConnectorException
RABBITMQ-09
RABBITMQ-09
Error message
setup ssl factory failed
What it means
RabbitmqClient.createConnectionFactory throws RabbitmqConnectorException(SETUP_SSL_FACTORY_FAILED) when building the SSL/TLS ConnectionFactory. SSLContext initialization calls sslContext.getInstance(protocol) and this NoSuchAlgorithmException branch means the JVM has no provider for the requested TLS protocol algorithm, so the secure factory cannot be created.
Source
Thrown at seatunnel-connectors-v2/connector-rabbitmq/src/main/java/org/apache/seatunnel/connectors/seatunnel/rabbitmq/client/RabbitmqClient.java:114
*/
public DefaultConsumer getQueueingConsumer(
BlockingQueue<DeliveryMessage> queue, String splitId) {
return new QueueingConsumer(channel, queue, splitId);
}
private ConnectionFactory createConnectionFactory() {
ConnectionFactory factory = new ConnectionFactory();
if (StringUtils.isNotEmpty(config.getUri())) {
try {
factory.setUri(config.getUri());
} catch (URISyntaxException e) {
throw new RabbitmqConnectorException(PARSE_URI_FAILED, e);
} catch (KeyManagementException e) {
// this should never happen
throw new RabbitmqConnectorException(INIT_SSL_CONTEXT_FAILED, e);
} catch (NoSuchAlgorithmException e) {
// this should never happen
throw new RabbitmqConnectorException(SETUP_SSL_FACTORY_FAILED, e);
}
} else {
factory.setHost(config.getHost());
factory.setPort(config.getPort());
if (StringUtils.isNotEmpty(config.getVirtualHost())) {
factory.setVirtualHost(config.getVirtualHost());
}
factory.setUsername(config.getUsername());
factory.setPassword(config.getPassword());
}
if (config.getAutomaticRecovery() != null) {
factory.setAutomaticRecoveryEnabled(config.getAutomaticRecovery());
}
if (config.getConnectionTimeout() != null) {
factory.setConnectionTimeout(config.getConnectionTimeout());
}
if (config.getNetworkRecoveryInterval() != null) {View on GitHub (pinned to cf67b549a7)
Solutions
- Check the JVM used by SeaTunnel (java -version, and which JDK installs the engine) and switch to a full Oracle/OpenJDK build that supports the required TLS version
- Inspect $JAVA_HOME/conf/security/java.security and re-enable the disabled TLS algorithm in jdk.tls.disabledAlgorithms
- If the client wraps TLSContext.getProtocol(), set an explicitly supported protocol via the RabbitMQ SSL config options rather than relying on defaults
- As a temporary workaround set useSsl=false if the broker allows plaintext connections on a trusted network
Example fix
// before
factory.useSslProtocol(); // relies on default TLS algorithm missing from JVM
// after
SSLContext ctx = SSLContext.getInstance("TLSv1.2"); // explicitly supported protocol
factory.useSslProtocol(ctx); Defensive patterns
Strategy: validation
Validate before calling
String proto = "TLSv1.2";
try {
javax.net.ssl.SSLContext.getInstance(proto);
System.out.println("TLS provider available");
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException("JVM lacks provider for " + proto + "; fix JDK/security config", e);
} Type guard
boolean tlsSupported(String proto) {
try { javax.net.ssl.SSLContext.getInstance(proto); return true; }
catch (Exception e) { return false; }
} Prevention
- Use a full OpenJDK/Oracle JDK build for the SeaTunnel engine, not a stripped JRE
- Review jdk.tls.disabledAlgorithms after JDK upgrades
- Test SSL connectivity to RabbitMQ in a smoke job before production
When it happens
Trigger: useSsl=true in the RabbitMQ config and SSLContext.getInstance(...) throws NoSuchAlgorithmException because the configured/implicit TLS algorithm (e.g. TLSv1.2/TLSv1.3) has no provider in the current JVM.
Common situations: Running on a stripped-down or older JRE/JDK without certain TLS providers; misconfigured java.security (jdk.tls.disabledAlgorithms removing all supported protocols); custom JVM builds (e.g. some JRE distributions lacking TLSv1.3) used to launch the SeaTunnel Zeta engine.
Understand the failure class
- SSL/TLS and certificate errors — how TLS handshakes and certificate validation fail.
Related errors
- Failed to configure TLS settings
- RABBITMQ-08
- AmazonDocumentDB option 'tls_ca_file' is required when TLS i
- AmazonDocumentDB TLS CA bundle is not a readable file:
- Could not load keystore
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/f3fb11c77e183805.
Report an issue: GitHub.