From 75ebb08479de1fcfe514c557e35abfcac3acd5f6 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 18 Sep 2018 09:20:21 -0400 Subject: [PATCH] GH-176: Add DLX Provisioning Flexibility Resolves https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit/issues/176 Resolves #177 - Add `declareDlx` to suppress declaration of DLX - Add `deadLetterExchangeType` to allow specification of the type --- .../properties/RabbitCommonProperties.java | 26 +++++++++++++++++++ .../RabbitExchangeQueueProvisioner.java | 21 ++++++++------- .../src/main/asciidoc/overview.adoc | 24 +++++++++++++++++ .../binder/rabbit/RabbitBinderTests.java | 11 ++++++++ 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/properties/RabbitCommonProperties.java b/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/properties/RabbitCommonProperties.java index 1d3a1bc28..abb66b29e 100644 --- a/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/properties/RabbitCommonProperties.java +++ b/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/properties/RabbitCommonProperties.java @@ -106,6 +106,16 @@ public abstract class RabbitCommonProperties implements MergableProperties { */ private String deadLetterExchange; + /** + * the type of the DLX, if autoBindDlq is true + */ + private String deadLetterExchangeType = ExchangeTypes.DIRECT; + + /** + * whether to declare the dead-letter exchange when autoBindDlq is true. + */ + private boolean declareDlx = true; + /** * a dead letter routing key to assign to that queue; if autoBindDlq is true, defaults to destination */ @@ -297,6 +307,22 @@ public abstract class RabbitCommonProperties implements MergableProperties { this.deadLetterExchange = deadLetterExchange; } + public String getDeadLetterExchangeType() { + return this.deadLetterExchangeType; + } + + public void setDeadLetterExchangeType(String deadLetterExchangeType) { + this.deadLetterExchangeType = deadLetterExchangeType; + } + + public boolean isDeclareDlx() { + return this.declareDlx; + } + + public void setDeclareDlx(boolean declareDlx) { + this.declareDlx = declareDlx; + } + public String getDeadLetterRoutingKey() { return this.deadLetterRoutingKey; } diff --git a/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/provisioning/RabbitExchangeQueueProvisioner.java b/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/provisioning/RabbitExchangeQueueProvisioner.java index 9c70f8894..092eeee5d 100644 --- a/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/provisioning/RabbitExchangeQueueProvisioner.java +++ b/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/provisioning/RabbitExchangeQueueProvisioner.java @@ -26,6 +26,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.amqp.AmqpConnectException; import org.springframework.amqp.core.AnonymousQueue; import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.Binding.DestinationType; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.Exchange; @@ -295,16 +296,15 @@ public class RabbitExchangeQueueProvisioner implements ApplicationListener