Commit 4d1373c9 authored by Stephane Nicoll's avatar Stephane Nicoll

Polish "Support amqps:// URIs in spring.rabbitmq.addresses"

See gh-18808
parent 0fedb24c
...@@ -125,7 +125,7 @@ public class RabbitAutoConfiguration { ...@@ -125,7 +125,7 @@ public class RabbitAutoConfiguration {
map.from(properties::getRequestedHeartbeat).whenNonNull().asInt(Duration::getSeconds) map.from(properties::getRequestedHeartbeat).whenNonNull().asInt(Duration::getSeconds)
.to(factory::setRequestedHeartbeat); .to(factory::setRequestedHeartbeat);
RabbitProperties.Ssl ssl = properties.getSsl(); RabbitProperties.Ssl ssl = properties.getSsl();
if (ssl.isEnabled()) { if (ssl.determineEnabled()) {
factory.setUseSSL(true); factory.setUseSSL(true);
map.from(ssl::getAlgorithm).whenNonNull().to(factory::setSslAlgorithm); map.from(ssl::getAlgorithm).whenNonNull().to(factory::setSslAlgorithm);
map.from(ssl::getKeyStoreType).to(factory::setKeyStoreType); map.from(ssl::getKeyStoreType).to(factory::setKeyStoreType);
......
...@@ -310,7 +310,7 @@ public class RabbitProperties { ...@@ -310,7 +310,7 @@ public class RabbitProperties {
return this.template; return this.template;
} }
public static class Ssl { public class Ssl {
/** /**
* Whether to enable SSL support. * Whether to enable SSL support.
...@@ -366,6 +366,21 @@ public class RabbitProperties { ...@@ -366,6 +366,21 @@ public class RabbitProperties {
return this.enabled; return this.enabled;
} }
/**
* Returns whether SSL is enabled from the first address, or the configured ssl
* enabled flag if no addresses have been set.
* @return whether ssl is enabled
* @see #setAddresses(String)
* @see #isEnabled()
*/
public boolean determineEnabled() {
if (CollectionUtils.isEmpty(RabbitProperties.this.parsedAddresses)) {
return isEnabled();
}
Address address = RabbitProperties.this.parsedAddresses.get(0);
return address.secureConnection;
}
public void setEnabled(boolean enabled) { public void setEnabled(boolean enabled) {
this.enabled = enabled; this.enabled = enabled;
} }
...@@ -951,7 +966,7 @@ public class RabbitProperties { ...@@ -951,7 +966,7 @@ public class RabbitProperties {
private String virtualHost; private String virtualHost;
private boolean isSecureConnection; private boolean secureConnection;
private Address(String input) { private Address(String input) {
input = input.trim(); input = input.trim();
...@@ -963,7 +978,7 @@ public class RabbitProperties { ...@@ -963,7 +978,7 @@ public class RabbitProperties {
private String trimPrefix(String input) { private String trimPrefix(String input) {
if (input.startsWith(PREFIX_AMQP_SECURE)) { if (input.startsWith(PREFIX_AMQP_SECURE)) {
this.isSecureConnection = true; this.secureConnection = true;
return input.substring(PREFIX_AMQP_SECURE.length()); return input.substring(PREFIX_AMQP_SECURE.length());
} }
if (input.startsWith(PREFIX_AMQP)) { if (input.startsWith(PREFIX_AMQP)) {
...@@ -1002,12 +1017,7 @@ public class RabbitProperties { ...@@ -1002,12 +1017,7 @@ public class RabbitProperties {
int portIndex = input.indexOf(':'); int portIndex = input.indexOf(':');
if (portIndex == -1) { if (portIndex == -1) {
this.host = input; this.host = input;
if (this.isSecureConnection) { this.port = (this.secureConnection) ? DEFAULT_PORT_SECURE : DEFAULT_PORT;
this.port = DEFAULT_PORT_SECURE;
}
else {
this.port = DEFAULT_PORT;
}
} }
else { else {
this.host = input.substring(0, portIndex); this.host = input.substring(0, portIndex);
......
...@@ -70,13 +70,6 @@ public class RabbitPropertiesTests { ...@@ -70,13 +70,6 @@ public class RabbitPropertiesTests {
assertThat(this.properties.getPort()).isEqualTo(1234); assertThat(this.properties.getPort()).isEqualTo(1234);
} }
@Test
void usingSecuredConnections() {
this.properties.setAddresses("amqps://root:password@otherhost,amqps://root:password2@otherhost2");
assertThat(this.properties.determinePort()).isEqualTo(5671);
assertThat(this.properties.determineAddresses()).isEqualTo("otherhost:5671,otherhost2:5671");
}
@Test @Test
public void determinePortReturnsPortOfFirstAddress() { public void determinePortReturnsPortOfFirstAddress() {
this.properties.setAddresses("rabbit1.example.com:1234,rabbit2.example.com:2345"); this.properties.setAddresses("rabbit1.example.com:1234,rabbit2.example.com:2345");
...@@ -96,6 +89,18 @@ public class RabbitPropertiesTests { ...@@ -96,6 +89,18 @@ public class RabbitPropertiesTests {
assertThat(this.properties.determinePort()).isEqualTo(5672); assertThat(this.properties.determinePort()).isEqualTo(5672);
} }
@Test
public void determinePortUsingAmqpReturnsPortOfFirstAddress() {
this.properties.setAddresses("amqp://root:password@otherhost,amqps://root:password2@otherhost2");
assertThat(this.properties.determinePort()).isEqualTo(5672);
}
@Test
public void determinePortUsingAmqpsReturnsPortOfFirstAddress() {
this.properties.setAddresses("amqps://root:password@otherhost,amqp://root:password2@otherhost2");
assertThat(this.properties.determinePort()).isEqualTo(5671);
}
@Test @Test
public void virtualHostDefaultsToNull() { public void virtualHostDefaultsToNull() {
assertThat(this.properties.getVirtualHost()).isNull(); assertThat(this.properties.getVirtualHost()).isNull();
...@@ -229,6 +234,24 @@ public class RabbitPropertiesTests { ...@@ -229,6 +234,24 @@ public class RabbitPropertiesTests {
assertThat(this.properties.determineAddresses()).isEqualTo("rabbit.example.com:1234"); assertThat(this.properties.determineAddresses()).isEqualTo("rabbit.example.com:1234");
} }
@Test
public void determineSslUsingAmqpsReturnsStateOfFirstAddress() {
this.properties.setAddresses("amqps://root:password@otherhost,amqp://root:password2@otherhost2");
assertThat(this.properties.getSsl().determineEnabled()).isTrue();
}
@Test
public void determineSslUsingAmqpReturnsStateOfFirstAddress() {
this.properties.setAddresses("amqp://root:password@otherhost,amqps://root:password2@otherhost2");
assertThat(this.properties.getSsl().determineEnabled()).isFalse();
}
@Test
public void determineSslReturnFlagPropertyWhenNoAddresses() {
this.properties.getSsl().setEnabled(true);
assertThat(this.properties.getSsl().determineEnabled()).isTrue();
}
@Test @Test
public void simpleContainerUseConsistentDefaultValues() { public void simpleContainerUseConsistentDefaultValues() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
......
...@@ -4762,6 +4762,13 @@ For example, you might declare the following section in `application.properties` ...@@ -4762,6 +4762,13 @@ For example, you might declare the following section in `application.properties`
spring.rabbitmq.password=secret spring.rabbitmq.password=secret
---- ----
Alternatively, you could configure the same connection using the `addresses` attributes:
[source,properties,indent=0]
----
spring.rabbitmq.addresses=amqp://admin:secret@localhost
----
If a `ConnectionNameStrategy` bean exists in the context, it will be automatically used to name connections created by the auto-configured `ConnectionFactory`. If a `ConnectionNameStrategy` bean exists in the context, it will be automatically used to name connections created by the auto-configured `ConnectionFactory`.
See {spring-boot-autoconfigure-module-code}/amqp/RabbitProperties.java[`RabbitProperties`] for more of the supported options. See {spring-boot-autoconfigure-module-code}/amqp/RabbitProperties.java[`RabbitProperties`] for more of the supported options.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment