GH-107: Disallow HeaderMode.embeddedHeaders

It is invalid to configure a RabbitMQ binding to use embedded headers since
RabbitMQ supports headers natively.

Resolves: spring-cloud/spring-cloud-stream-binder-rabbit#107
This commit is contained in:
Gary Russell
2017-10-24 14:59:24 -04:00
committed by Artem Bilan
parent 8032a1ca9b
commit df5f2692b4

View File

@@ -51,6 +51,7 @@ import org.springframework.cloud.stream.binder.BinderHeaders;
import org.springframework.cloud.stream.binder.ExtendedConsumerProperties;
import org.springframework.cloud.stream.binder.ExtendedProducerProperties;
import org.springframework.cloud.stream.binder.ExtendedPropertiesBinder;
import org.springframework.cloud.stream.binder.HeaderMode;
import org.springframework.cloud.stream.binder.rabbit.properties.RabbitCommonProperties;
import org.springframework.cloud.stream.binder.rabbit.properties.RabbitConsumerProperties;
import org.springframework.cloud.stream.binder.rabbit.properties.RabbitExtendedBindingProperties;
@@ -293,6 +294,8 @@ public class RabbitMessageChannelBinder
protected MessageHandler createProducerMessageHandler(final ProducerDestination producerDestination,
ExtendedProducerProperties<RabbitProducerProperties> producerProperties, MessageChannel errorChannel)
throws Exception {
Assert.state(!producerProperties.getHeaderMode().equals(HeaderMode.embeddedHeaders),
"the RabbitMQ binder does not support embedded headers since RabbitMQ supports headers natively");
String prefix = producerProperties.getExtension().getPrefix();
String exchangeName = producerDestination.getName();
String destination = StringUtils.isEmpty(prefix) ? exchangeName : exchangeName.substring(prefix.length());
@@ -370,6 +373,8 @@ public class RabbitMessageChannelBinder
@Override
protected MessageProducer createConsumerEndpoint(ConsumerDestination consumerDestination, String group,
ExtendedConsumerProperties<RabbitConsumerProperties> properties) {
Assert.state(!properties.getHeaderMode().equals(HeaderMode.embeddedHeaders),
"the RabbitMQ binder does not support embedded headers since RabbitMQ supports headers natively");
String destination = consumerDestination.getName();
SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer(
this.connectionFactory);