GH-251: RKExpression interceptor improvements
Resolves https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit/issues/251 We apply the interceptor only if the expression contains `payload` but the interceptor is needed if the expression refers to the complete `Message` (`#root` or `#this`).
This commit is contained in:
@@ -23,6 +23,7 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import com.rabbitmq.client.AMQP;
|
||||
import com.rabbitmq.client.Envelope;
|
||||
@@ -141,6 +142,8 @@ public class RabbitMessageChannelBinder extends
|
||||
}
|
||||
};
|
||||
|
||||
private static final Pattern interceptorNeededPattern = Pattern.compile("(payload|#root|#this)");
|
||||
|
||||
// @checkstyle:on
|
||||
|
||||
private final RabbitProperties rabbitProperties;
|
||||
@@ -386,13 +389,12 @@ public class RabbitMessageChannelBinder extends
|
||||
}
|
||||
}
|
||||
|
||||
private boolean expressionInterceptorNeeded(
|
||||
RabbitProducerProperties extendedProperties) {
|
||||
return extendedProperties.getRoutingKeyExpression() != null
|
||||
&& extendedProperties.getRoutingKeyExpression().getExpressionString()
|
||||
.contains("payload")
|
||||
|| (extendedProperties.getDelayExpression() != null && extendedProperties
|
||||
.getDelayExpression().getExpressionString().contains("payload"));
|
||||
private boolean expressionInterceptorNeeded(RabbitProducerProperties extendedProperties) {
|
||||
Expression rkExpression = extendedProperties.getRoutingKeyExpression();
|
||||
Expression delayExpression = extendedProperties.getDelayExpression();
|
||||
return (rkExpression != null && interceptorNeededPattern.matcher(rkExpression.getExpressionString()).find())
|
||||
|| (delayExpression != null
|
||||
&& interceptorNeededPattern.matcher(delayExpression.getExpressionString()).find());
|
||||
}
|
||||
|
||||
private void checkConnectionFactoryIsErrorCapable() {
|
||||
|
||||
@@ -1631,7 +1631,7 @@ public class RabbitBinderTests extends
|
||||
RabbitTestBinder binder = getBinder();
|
||||
ExtendedProducerProperties<RabbitProducerProperties> producerProperties = createProducerProperties();
|
||||
producerProperties.getExtension().setRoutingKeyExpression(
|
||||
spelExpressionParser.parseExpression("payload.field"));
|
||||
spelExpressionParser.parseExpression("#root.getPayload().field"));
|
||||
// requires delayed message exchange plugin; tested locally
|
||||
// producerProperties.getExtension().setDelayedExchange(true);
|
||||
producerProperties.getExtension()
|
||||
|
||||
Reference in New Issue
Block a user