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.
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…
- 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.
Appendix: 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)