Skip to content

Commit 907b602

Browse files
committed
Fix send result header propagation and use raw message ID in observation
1 parent 3457342 commit 907b602

File tree

4 files changed

+17
-12
lines changed

4 files changed

+17
-12
lines changed

docs/src/main/asciidoc/sqs.adoc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,9 @@ For convenience, the `additionalInformation` parameters can be found as constant
324324
By default, Spring Cloud AWS SQS expects the message ID returned by SQS to be a valid UUID.
325325
If a non-UUID message ID is received, an error is thrown with instructions to enable non-UUID support.
326326

327+
The raw provider message ID is always stored in the `Sqs_RawMessageId` header, regardless of whether UUID conversion is enabled or disabled.
328+
Access the raw ID via `MessageHeaderUtils.getRawMessageId(message)`.
329+
327330
To enable non-UUID message ID support (e.g., for Yandex Message Queue or other SQS-compatible providers):
328331

329332
[source,properties]
@@ -333,12 +336,10 @@ spring.cloud.aws.sqs.convert-message-id-to-uuid=false
333336

334337
When disabled:
335338

336-
* **Receive side**: The raw provider message ID is stored in the `Sqs_RawMessageId` header.
337-
A deterministic UUID derived from the raw ID is used as the Spring `MessageHeaders.ID`.
338-
Access the raw ID via `MessageHeaderUtils.getRawMessageId(message)`.
339+
* **Receive side**: A deterministic UUID derived from the raw ID is used as the Spring `MessageHeaders.ID`.
339340
* **Send side**: If the send response contains a non-UUID message ID,
340341
`SendResult.messageId()` returns a deterministic UUID and the raw ID is available
341-
in `SendResult.additionalInformation()` under the `rawMessageId` key.
342+
in the `SendResult.message()` headers.
342343

343344
[[template-message-conversion]]
344345
==== Template Message Conversion

spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/operations/SqsTemplate.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,11 +343,13 @@ private <T> SendResult<T> createSendResult(String rawMessageId, @Nullable String
343343
MessageHeaders resolvedHeaders = SqsMessageIdResolver.resolveAndAddMessageId(rawMessageId,
344344
originalMessage.getHeaders(), this.convertMessageIdToUuid);
345345
UUID messageId = resolvedHeaders.getId();
346+
org.springframework.messaging.Message<T> messageWithHeaders = MessageBuilder.createMessage(
347+
originalMessage.getPayload(), resolvedHeaders);
346348
Map<String, Object> additionalInfo = new HashMap<>();
347349
if (sequenceNumber != null) {
348350
additionalInfo.put(SqsTemplateParameters.SEQUENCE_NUMBER_PARAMETER_NAME, sequenceNumber);
349351
}
350-
return new SendResult<>(messageId, endpointName, originalMessage,
352+
return new SendResult<>(messageId, endpointName, messageWithHeaders,
351353
additionalInfo.isEmpty() ? Collections.emptyMap() : additionalInfo);
352354
}
353355

spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/support/converter/SqsMessageIdResolver.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.awspring.cloud.sqs.MessageHeaderUtils;
1919
import io.awspring.cloud.sqs.listener.SqsHeaders;
2020
import java.nio.charset.StandardCharsets;
21+
import java.util.Optional;
2122
import java.util.UUID;
2223
import org.springframework.messaging.MessageHeaders;
2324
import org.springframework.messaging.MessagingException;
@@ -53,8 +54,9 @@ public static MessageHeaders resolveAndAddMessageId(String messageId, MessageHea
5354
boolean convertMessageIdToUuid) {
5455
MessageHeaders withRawId = MessageHeaderUtils.addHeaderIfAbsent(headers, SqsHeaders.SQS_RAW_MESSAGE_ID_HEADER,
5556
messageId);
56-
if (isValidUuid(messageId)) {
57-
return new MessagingMessageHeaders(withRawId, UUID.fromString(messageId));
57+
Optional<UUID> uuid = tryParseUuid(messageId);
58+
if (uuid.isPresent()) {
59+
return new MessagingMessageHeaders(withRawId, uuid.get());
5860
}
5961
if (convertMessageIdToUuid) {
6062
throw new MessagingException(String.format(
@@ -85,13 +87,12 @@ public static void configureMessageIdResolution(MessagingMessageConverter<Messag
8587
}
8688
}
8789

88-
private static boolean isValidUuid(String value) {
90+
private static Optional<UUID> tryParseUuid(String value) {
8991
try {
90-
UUID.fromString(value);
91-
return true;
92+
return Optional.of(UUID.fromString(value));
9293
}
9394
catch (IllegalArgumentException e) {
94-
return false;
95+
return Optional.empty();
9596
}
9697
}
9798

spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/support/observation/AbstractListenerObservation.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
* Observation for Message Listener Containers.
3030
*
3131
* @author Tomaz Fernandes
32+
* @author Jeongmin Kim
3233
* @since 3.4
3334
*/
3435
public abstract class AbstractListenerObservation {
@@ -234,7 +235,7 @@ protected Context(Message<?> message, String sourceName) {
234235
super((carrier, key) -> carrier.getHeaders().get(key, String.class));
235236
setCarrier(message);
236237
this.message = message;
237-
this.messageId = MessageHeaderUtils.getId(message);
238+
this.messageId = MessageHeaderUtils.getRawMessageId(message);
238239
this.sourceName = sourceName;
239240
}
240241

0 commit comments

Comments
 (0)