Skip to content

Commit af5fb7a

Browse files
garyrussellartembilan
authored andcommitted
GH-1415: Fix Use of Routing Connection Factory
Resolves #1415 The `sendConnectionFactorySelectorExpression` was being used for receive methods instead of `receiveConnectionFactorySelectorExpression`. **cherry-pick to 2.3.x, 2.2.x**
1 parent 04ddbbd commit af5fb7a

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitTemplate.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,10 +1035,10 @@ private ConnectionFactory obtainTargetConnectionFactory(Expression expression, O
10351035
(AbstractRoutingConnectionFactory) getConnectionFactory();
10361036
Object lookupKey;
10371037
if (rootObject != null) {
1038-
lookupKey = this.sendConnectionFactorySelectorExpression.getValue(this.evaluationContext, rootObject);
1038+
lookupKey = expression.getValue(this.evaluationContext, rootObject);
10391039
}
10401040
else {
1041-
lookupKey = this.sendConnectionFactorySelectorExpression.getValue(this.evaluationContext);
1041+
lookupKey = expression.getValue(this.evaluationContext);
10421042
}
10431043
if (lookupKey != null) {
10441044
ConnectionFactory connectionFactory = routingConnectionFactory.getTargetConnectionFactory(lookupKey);

spring-rabbit/src/test/java/org/springframework/amqp/rabbit/core/RabbitTemplateTests.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2021 the original author or authors.
2+
* Copyright 2002-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -365,24 +365,33 @@ public void testNoListenerAllowed2() {
365365
@SuppressWarnings("unchecked")
366366
public void testRoutingConnectionFactory() throws Exception {
367367
org.springframework.amqp.rabbit.connection.ConnectionFactory connectionFactory1 =
368-
Mockito.mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class);
368+
mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class);
369369
org.springframework.amqp.rabbit.connection.ConnectionFactory connectionFactory2 =
370-
Mockito.mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class);
370+
mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class);
371+
org.springframework.amqp.rabbit.connection.ConnectionFactory connectionFactory3 =
372+
mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class);
373+
org.springframework.amqp.rabbit.connection.ConnectionFactory connectionFactory4 =
374+
mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class);
371375
Map<Object, org.springframework.amqp.rabbit.connection.ConnectionFactory> factories =
372376
new HashMap<Object, org.springframework.amqp.rabbit.connection.ConnectionFactory>(2);
373377
factories.put("foo", connectionFactory1);
374378
factories.put("bar", connectionFactory2);
379+
factories.put("baz", connectionFactory3);
380+
factories.put("qux", connectionFactory4);
375381

376382

377383
AbstractRoutingConnectionFactory connectionFactory = new SimpleRoutingConnectionFactory();
378384
connectionFactory.setTargetConnectionFactories(factories);
379385

380386
final RabbitTemplate template = new RabbitTemplate(connectionFactory);
381-
Expression expression = new SpelExpressionParser()
387+
Expression sendExpression = new SpelExpressionParser()
382388
.parseExpression("T(org.springframework.amqp.rabbit.core.RabbitTemplateTests)" +
383389
".LOOKUP_KEY_COUNT.getAndIncrement() % 2 == 0 ? 'foo' : 'bar'");
384-
template.setSendConnectionFactorySelectorExpression(expression);
385-
template.setReceiveConnectionFactorySelectorExpression(expression);
390+
template.setSendConnectionFactorySelectorExpression(sendExpression);
391+
Expression receiveExpression = new SpelExpressionParser()
392+
.parseExpression("T(org.springframework.amqp.rabbit.core.RabbitTemplateTests)" +
393+
".LOOKUP_KEY_COUNT.getAndIncrement() % 2 == 0 ? 'baz' : 'qux'");
394+
template.setReceiveConnectionFactorySelectorExpression(receiveExpression);
386395

387396
for (int i = 0; i < 3; i++) {
388397
try {
@@ -405,8 +414,10 @@ public void testRoutingConnectionFactory() throws Exception {
405414
}
406415
}
407416

408-
Mockito.verify(connectionFactory1, Mockito.times(5)).createConnection();
409-
Mockito.verify(connectionFactory2, Mockito.times(4)).createConnection();
417+
Mockito.verify(connectionFactory1, times(2)).createConnection();
418+
Mockito.verify(connectionFactory2, times(1)).createConnection();
419+
Mockito.verify(connectionFactory3, times(3)).createConnection();
420+
Mockito.verify(connectionFactory4, times(3)).createConnection();
410421
}
411422

412423
@Test

0 commit comments

Comments
 (0)