Polish "Support amqps:// URIs in spring.rabbitmq.addresses"
See gh-18808
This commit is contained in:
@@ -125,7 +125,7 @@ public class RabbitAutoConfiguration {
|
||||
map.from(properties::getRequestedHeartbeat).whenNonNull().asInt(Duration::getSeconds)
|
||||
.to(factory::setRequestedHeartbeat);
|
||||
RabbitProperties.Ssl ssl = properties.getSsl();
|
||||
if (ssl.isEnabled()) {
|
||||
if (ssl.determineEnabled()) {
|
||||
factory.setUseSSL(true);
|
||||
map.from(ssl::getAlgorithm).whenNonNull().to(factory::setSslAlgorithm);
|
||||
map.from(ssl::getKeyStoreType).to(factory::setKeyStoreType);
|
||||
|
||||
@@ -310,7 +310,7 @@ public class RabbitProperties {
|
||||
return this.template;
|
||||
}
|
||||
|
||||
public static class Ssl {
|
||||
public class Ssl {
|
||||
|
||||
/**
|
||||
* Whether to enable SSL support.
|
||||
@@ -366,6 +366,21 @@ public class RabbitProperties {
|
||||
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) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
@@ -951,7 +966,7 @@ public class RabbitProperties {
|
||||
|
||||
private String virtualHost;
|
||||
|
||||
private boolean isSecureConnection;
|
||||
private boolean secureConnection;
|
||||
|
||||
private Address(String input) {
|
||||
input = input.trim();
|
||||
@@ -963,7 +978,7 @@ public class RabbitProperties {
|
||||
|
||||
private String trimPrefix(String input) {
|
||||
if (input.startsWith(PREFIX_AMQP_SECURE)) {
|
||||
this.isSecureConnection = true;
|
||||
this.secureConnection = true;
|
||||
return input.substring(PREFIX_AMQP_SECURE.length());
|
||||
}
|
||||
if (input.startsWith(PREFIX_AMQP)) {
|
||||
@@ -1002,12 +1017,7 @@ public class RabbitProperties {
|
||||
int portIndex = input.indexOf(':');
|
||||
if (portIndex == -1) {
|
||||
this.host = input;
|
||||
if (this.isSecureConnection) {
|
||||
this.port = DEFAULT_PORT_SECURE;
|
||||
}
|
||||
else {
|
||||
this.port = DEFAULT_PORT;
|
||||
}
|
||||
this.port = (this.secureConnection) ? DEFAULT_PORT_SECURE : DEFAULT_PORT;
|
||||
}
|
||||
else {
|
||||
this.host = input.substring(0, portIndex);
|
||||
|
||||
@@ -70,13 +70,6 @@ public class RabbitPropertiesTests {
|
||||
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
|
||||
public void determinePortReturnsPortOfFirstAddress() {
|
||||
this.properties.setAddresses("rabbit1.example.com:1234,rabbit2.example.com:2345");
|
||||
@@ -96,6 +89,18 @@ public class RabbitPropertiesTests {
|
||||
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
|
||||
public void virtualHostDefaultsToNull() {
|
||||
assertThat(this.properties.getVirtualHost()).isNull();
|
||||
@@ -229,6 +234,24 @@ public class RabbitPropertiesTests {
|
||||
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
|
||||
public void simpleContainerUseConsistentDefaultValues() {
|
||||
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
|
||||
|
||||
@@ -4762,6 +4762,13 @@ For example, you might declare the following section in `application.properties`
|
||||
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`.
|
||||
See {spring-boot-autoconfigure-module-code}/amqp/RabbitProperties.java[`RabbitProperties`] for more of the supported options.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user