Skip to content

Commit 47c5baa

Browse files
garyrussellartembilan
authored andcommitted
GH-1038: RT: Fix evaluatedFastReplyTo
Fixes #1038 Don't set `evaluatedFastReplyTo` if we didn't actually evaluate it because the broker is down on the first request. **cherry-pick to all 2.x; backport to 1.7.x** # Conflicts: # spring-rabbit/src/test/java/org/springframework/amqp/rabbit/core/RabbitTemplateTests.java # Conflicts: # spring-rabbit/src/test/java/org/springframework/amqp/rabbit/core/RabbitTemplateTests.java
1 parent ff8a5da commit 47c5baa

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.concurrent.TimeoutException;
3838
import java.util.concurrent.atomic.AtomicInteger;
3939

40+
import org.springframework.amqp.AmqpConnectException;
4041
import org.springframework.amqp.AmqpException;
4142
import org.springframework.amqp.AmqpIllegalStateException;
4243
import org.springframework.amqp.AmqpRejectAndDontRequeueException;
@@ -839,11 +840,13 @@ protected boolean useDirectReplyTo() {
839840
}
840841
if (this.replyAddress == null || Address.AMQ_RABBITMQ_REPLY_TO.equals(this.replyAddress)) {
841842
try {
842-
execute(channel -> {
843+
return execute(channel -> {
843844
channel.queueDeclarePassive(Address.AMQ_RABBITMQ_REPLY_TO);
844-
return null;
845+
return true;
845846
});
846-
return true;
847+
}
848+
catch (AmqpConnectException ex) {
849+
throw ex;
847850
}
848851
catch (Exception e) {
849852
if (logger.isDebugEnabled()) {

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818

1919
import static org.hamcrest.Matchers.containsString;
2020
import static org.hamcrest.Matchers.equalTo;
21+
import static org.hamcrest.Matchers.instanceOf;
2122
import static org.junit.Assert.assertEquals;
23+
import static org.junit.Assert.assertFalse;
2224
import static org.junit.Assert.assertSame;
2325
import static org.junit.Assert.assertThat;
2426
import static org.junit.Assert.assertTrue;
@@ -28,6 +30,7 @@
2830
import static org.mockito.ArgumentMatchers.isNull;
2931
import static org.mockito.BDDMockito.given;
3032
import static org.mockito.BDDMockito.willReturn;
33+
import static org.mockito.BDDMockito.willThrow;
3134
import static org.mockito.Mockito.doAnswer;
3235
import static org.mockito.Mockito.mock;
3336
import static org.mockito.Mockito.times;
@@ -49,6 +52,7 @@
4952
import org.mockito.Mockito;
5053

5154
import org.springframework.amqp.AmqpAuthenticationException;
55+
import org.springframework.amqp.AmqpConnectException;
5256
import org.springframework.amqp.core.Address;
5357
import org.springframework.amqp.core.Message;
5458
import org.springframework.amqp.core.MessageProperties;
@@ -63,6 +67,7 @@
6367
import org.springframework.amqp.rabbit.support.PublisherCallbackChannel;
6468
import org.springframework.amqp.support.converter.SimpleMessageConverter;
6569
import org.springframework.amqp.utils.SerializationUtils;
70+
import org.springframework.amqp.utils.test.TestUtils;
6671
import org.springframework.context.ApplicationContext;
6772
import org.springframework.expression.Expression;
6873
import org.springframework.expression.spel.standard.SpelExpressionParser;
@@ -227,6 +232,23 @@ public void testRetry() throws Exception {
227232
assertEquals(3, count.get());
228233
}
229234

235+
@Test
236+
public void testEvaluateDirectReplyToWithConnectException() {
237+
org.springframework.amqp.rabbit.connection.ConnectionFactory mockConnectionFactory =
238+
mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class);
239+
willThrow(new AmqpConnectException(null)).given(mockConnectionFactory).createConnection();
240+
RabbitTemplate template = new RabbitTemplate(mockConnectionFactory);
241+
242+
try {
243+
template.convertSendAndReceive("foo");
244+
}
245+
catch (Exception ex) {
246+
assertThat(ex, instanceOf(AmqpConnectException.class));
247+
}
248+
249+
assertFalse(TestUtils.getPropertyValue(template, "evaluatedFastReplyTo", Boolean.class));
250+
}
251+
230252
@Test
231253
public void testRecovery() throws Exception {
232254
ConnectionFactory mockConnectionFactory = mock(ConnectionFactory.class);

0 commit comments

Comments
 (0)