rabbitmq配置[{rabbit, [{loopback_users, []}, {auth_mechanisms,['EXTERNAL']} ]}].,java报Connection refused: connect
时间: 2023-11-03 09:56:25 浏览: 44
根据你提供的信息,rabbitmq配置了auth_mechanisms为EXTERNAL,这意味着RabbitMQ只允许使用SSL/TLS连接,并且客户端必须提供证书进行身份验证。因此,你需要在Java代码中配置SSL/TLS连接,并提供客户端证书。
具体步骤如下:
1. 首先需要获取RabbitMQ Java Client库的依赖,可以通过Maven或Gradle进行引入。
2. 在Java代码中创建SSLContext对象,配置SSL/TLS连接的相关参数,包括证书、私钥、信任库等。
```
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream(new File("client.p12")), "password".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, "password".toCharArray());
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream(new File("truststore.jks")), "password".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
```
3. 在ConnectionFactory对象中配置SSLContext对象,并设置连接参数。
```
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setPort(5671);
factory.setUsername("guest");
factory.setPassword("guest");
factory.useSslProtocol(sslContext);
Map<String,Object> clientProperties = new HashMap<String,Object>();
clientProperties.put("auth_mechanism", "EXTERNAL");
factory.setClientProperties(clientProperties);
```
4. 通过ConnectionFactory对象创建连接,并创建Channel对象。
```
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
```
需要注意的是,客户端证书需要提前生成,并导入到RabbitMQ服务器的信任库中。同时,需要在RabbitMQ服务器端配置相应的SSL证书和私钥。如果还是无法连接,可以检查防火墙和网络连接等问题。