Skip to content

Commit 5a7af10

Browse files
committed
Disable DNS resolution on connection creation
This can interfer with hostname resolution when TLS is on. Fixes #401
1 parent b8197cc commit 5a7af10

File tree

2 files changed

+58
-5
lines changed

2 files changed

+58
-5
lines changed

src/main/java/com/rabbitmq/client/ConnectionFactory.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -1219,11 +1219,7 @@ public Connection newConnection(ExecutorService executor, String connectionName)
12191219
}
12201220

12211221
protected AddressResolver createAddressResolver(List<Address> addresses) {
1222-
if(addresses.size() == 1) {
1223-
return new DnsRecordIpAddressResolver(addresses.get(0), isSSL());
1224-
} else {
1225-
return new ListAddressResolver(addresses);
1226-
}
1222+
return new ListAddressResolver(addresses);
12271223
}
12281224

12291225
@Override public ConnectionFactory clone(){

src/test/java/com/rabbitmq/client/test/ConnectionFactoryTest.java

+57
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
package com.rabbitmq.client.test;
1717

1818
import com.rabbitmq.client.Address;
19+
import com.rabbitmq.client.AddressResolver;
1920
import com.rabbitmq.client.Connection;
2021
import com.rabbitmq.client.ConnectionFactory;
22+
import com.rabbitmq.client.DnsRecordIpAddressResolver;
23+
import com.rabbitmq.client.ListAddressResolver;
2124
import com.rabbitmq.client.MetricsCollector;
2225
import com.rabbitmq.client.impl.AMQConnection;
2326
import com.rabbitmq.client.impl.ConnectionParams;
@@ -27,11 +30,16 @@
2730
import org.junit.Test;
2831

2932
import java.io.IOException;
33+
import java.util.List;
3034
import java.util.Queue;
3135
import java.util.concurrent.ArrayBlockingQueue;
3236
import java.util.concurrent.TimeoutException;
3337
import java.util.concurrent.atomic.AtomicBoolean;
38+
import java.util.concurrent.atomic.AtomicReference;
3439

40+
import static org.hamcrest.Matchers.allOf;
41+
import static org.hamcrest.Matchers.instanceOf;
42+
import static org.hamcrest.Matchers.notNullValue;
3543
import static org.junit.Assert.*;
3644
import static org.mockito.Mockito.*;
3745

@@ -90,4 +98,53 @@ protected AMQConnection createConnection(ConnectionParams params, FrameHandler f
9098
assertTrue(createCalled.get());
9199
}
92100

101+
@Test public void shouldNotUseDnsResolutionWhenOneAddressAndNoTls() throws Exception {
102+
AMQConnection connection = mock(AMQConnection.class);
103+
AtomicReference<AddressResolver> addressResolver = new AtomicReference<>();
104+
105+
ConnectionFactory connectionFactory = new ConnectionFactory() {
106+
@Override
107+
protected AMQConnection createConnection(ConnectionParams params, FrameHandler frameHandler,
108+
MetricsCollector metricsCollector) {
109+
return connection;
110+
}
111+
112+
@Override
113+
protected AddressResolver createAddressResolver(List<Address> addresses) {
114+
addressResolver.set(super.createAddressResolver(addresses));
115+
return addressResolver.get();
116+
}
117+
};
118+
119+
doNothing().when(connection).start();
120+
connectionFactory.newConnection();
121+
122+
assertThat(addressResolver.get(), allOf(notNullValue(), instanceOf(ListAddressResolver.class)));
123+
}
124+
125+
@Test public void shouldNotUseDnsResolutionWhenOneAddressAndTls() throws Exception {
126+
AMQConnection connection = mock(AMQConnection.class);
127+
AtomicReference<AddressResolver> addressResolver = new AtomicReference<>();
128+
129+
ConnectionFactory connectionFactory = new ConnectionFactory() {
130+
@Override
131+
protected AMQConnection createConnection(ConnectionParams params, FrameHandler frameHandler,
132+
MetricsCollector metricsCollector) {
133+
return connection;
134+
}
135+
136+
@Override
137+
protected AddressResolver createAddressResolver(List<Address> addresses) {
138+
addressResolver.set(super.createAddressResolver(addresses));
139+
return addressResolver.get();
140+
}
141+
};
142+
143+
doNothing().when(connection).start();
144+
connectionFactory.useSslProtocol();
145+
connectionFactory.newConnection();
146+
147+
assertThat(addressResolver.get(), allOf(notNullValue(), instanceOf(ListAddressResolver.class)));
148+
}
149+
93150
}

0 commit comments

Comments
 (0)