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 c106793ef..67706d5fb 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 @@ -16,10 +16,9 @@ package org.springframework.cloud.stream.binder.rabbit.provisioning; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; +import java.util.stream.Stream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -58,6 +57,7 @@ import org.springframework.util.StringUtils; * * @author Soby Chacko * @author Gary Russell + * @author Oleg Zhurakousky */ public class RabbitExchangeQueueProvisioner implements ApplicationListener, ProvisioningProvider, @@ -131,19 +131,17 @@ public class RabbitExchangeQueueProvisioner implements ApplicationListener properties) { + ConsumerDestination consumerDestination; if (!properties.isMultiplex()) { - return doProvisionConsumerDestination(name, group, properties); + consumerDestination = doProvisionConsumerDestination(name, group, properties); } else { - String[] destinations = StringUtils.commaDelimitedListToStringArray(name); - List queues = new ArrayList<>(); - for (String destination : destinations) { - ConsumerDestination dest = doProvisionConsumerDestination(destination.trim(), group, properties); - queues.add(dest.getName()); - } - return new RabbitConsumerDestination( - StringUtils.arrayToCommaDelimitedString(queues.toArray(new String[queues.size()])), null); + String[] provisionedDestinations = Stream.of(StringUtils.tokenizeToStringArray(name, ",", true, true)) + .map(destination -> doProvisionConsumerDestination(destination, group, properties).getName()) + .toArray(String[]::new); + consumerDestination = new RabbitConsumerDestination(StringUtils.arrayToCommaDelimitedString(provisionedDestinations), null); } + return consumerDestination; } private ConsumerDestination doProvisionConsumerDestination(String name, String group, @@ -498,20 +496,14 @@ public class RabbitExchangeQueueProvisioner implements ApplicationListener consumerProperties) { synchronized (this.autoDeclareContext) { - String[] names = new String[] { destination.getName() }; - if (consumerProperties.isMultiplex()) { - names = StringUtils.commaDelimitedListToStringArray(destination.getName()); - } - for (int i = 0; i < names.length; i++) { - names[i] = names[i].trim(); - } - for (String name : names) { + Stream.of(StringUtils.tokenizeToStringArray(destination.getName(), ",", true, true)).forEach(name -> { + name = name.trim(); removeSingleton(name + ".binding"); removeSingleton(name); String dlq = name + ".dlq"; removeSingleton(dlq + ".binding"); removeSingleton(dlq); - } + }); } } diff --git a/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java b/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java index ba0555866..2caea8064 100644 --- a/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java +++ b/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java @@ -361,16 +361,7 @@ public class RabbitMessageChannelBinder listenerContainer.setRecoveryInterval(properties.getExtension().getRecoveryInterval()); listenerContainer.setTxSize(properties.getExtension().getTxSize()); listenerContainer.setTaskExecutor(new SimpleAsyncTaskExecutor(consumerDestination.getName() + "-")); - String[] queues; - if (properties.isMultiplex()) { - queues = StringUtils.commaDelimitedListToStringArray(destination); - } - else { - queues = new String[] { destination }; - } - for (int i = 0; i < queues.length; i++) { - queues[i] = queues[i].trim(); - } + String[] queues = StringUtils.tokenizeToStringArray(destination, ",", true, true); listenerContainer.setQueueNames(queues); listenerContainer.setAfterReceivePostProcessors(this.decompressingPostProcessor); listenerContainer.setMessagePropertiesConverter(