Skip to content

Commit 7751dbc

Browse files
jkavingspring-builds
authored andcommitted
GH-2949: Fix retryCount handling in the DefaultMessagePropertiesConverter
Fixes: #2949 Issue link: #2949 * The handling of `retryCount` is moved into `convertHeadersIfNecessary()`, so that we can still return a `Collections.emptyMap()` if there are no headers in the source `MessageProperties` and no `retryCount` to add. Signed-off-by: Johan Kaving <[email protected]> [[email protected] improve commit message] Signed-off-by: Artem Bilan <[email protected]> (cherry picked from commit f621b86)
1 parent 488c8fb commit 7751dbc

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverter.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
* @author Raylax Grey
4444
* @author Artem Bilan
4545
* @author Ngoc Nhan
46+
* @author Johan Kaving
4647
*
4748
* @since 1.0
4849
*/
@@ -155,11 +156,7 @@ else if (MessageProperties.RETRY_COUNT.equals(key)) {
155156
@Override
156157
public BasicProperties fromMessageProperties(final MessageProperties source, final String charset) {
157158
BasicProperties.Builder target = new BasicProperties.Builder();
158-
Map<String, Object> headers = convertHeadersIfNecessary(source.getHeaders());
159-
long retryCount = source.getRetryCount();
160-
if (retryCount > 0) {
161-
headers.put(MessageProperties.RETRY_COUNT, retryCount);
162-
}
159+
Map<String, Object> headers = convertHeadersIfNecessary(source);
163160
target.headers(headers)
164161
.timestamp(source.getTimestamp())
165162
.messageId(source.getMessageId())
@@ -186,14 +183,20 @@ public BasicProperties fromMessageProperties(final MessageProperties source, fin
186183
return target.build();
187184
}
188185

189-
private Map<String, Object> convertHeadersIfNecessary(Map<String, Object> headers) {
190-
if (CollectionUtils.isEmpty(headers)) {
186+
private Map<String, Object> convertHeadersIfNecessary(MessageProperties source) {
187+
Map<String, Object> headers = source.getHeaders();
188+
long retryCount = source.getRetryCount();
189+
190+
if (CollectionUtils.isEmpty(headers) && retryCount == 0) {
191191
return Collections.emptyMap();
192192
}
193193
Map<String, Object> writableHeaders = new HashMap<>();
194194
for (Map.Entry<String, Object> entry : headers.entrySet()) {
195195
writableHeaders.put(entry.getKey(), this.convertHeaderValueIfNecessary(entry.getValue()));
196196
}
197+
if (retryCount > 0) {
198+
writableHeaders.put(MessageProperties.RETRY_COUNT, retryCount);
199+
}
197200
return writableHeaders;
198201
}
199202

spring-rabbit/src/test/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverterTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
/**
3939
* @author Soeren Unruh
4040
* @author Gary Russell
41+
* @author Johan Kaving
4142
* @since 1.3
4243
*/
4344
public class DefaultMessagePropertiesConverterTests {
@@ -200,6 +201,17 @@ public void testClassHeader() {
200201
assertThat(basic.getHeaders().get("aClass")).isEqualTo(getClass().getName());
201202
}
202203

204+
@Test
205+
public void testRetryCount() {
206+
MessageProperties props = new MessageProperties();
207+
props.incrementRetryCount();
208+
BasicProperties basic = new DefaultMessagePropertiesConverter().fromMessageProperties(props, "UTF8");
209+
assertThat(basic.getHeaders().get(MessageProperties.RETRY_COUNT)).isEqualTo(1L);
210+
props.incrementRetryCount();
211+
basic = new DefaultMessagePropertiesConverter().fromMessageProperties(props, "UTF8");
212+
assertThat(basic.getHeaders().get(MessageProperties.RETRY_COUNT)).isEqualTo(2L);
213+
}
214+
203215
private static class Foo {
204216

205217
Foo() {

0 commit comments

Comments
 (0)