Skip to content

Instantly share code, notes, and snippets.

@jkuipers
Created November 7, 2023 08:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jkuipers/93af748441e895068ce03190a1143f0e to your computer and use it in GitHub Desktop.
Save jkuipers/93af748441e895068ce03190a1143f0e to your computer and use it in GitHub Desktop.
Adds tracing headers to messages sent via Spring Cloud AWS's SqsTemplate
@Bean
SqsTemplate sqsTemplate(SqsAsyncClient sqsAsyncClient, ObjectMapper objectMapper, Tracing tracing) {
var injector = tracing.propagation().injector(
(Propagation.Setter<Map<String, Object>, String>) (headersMap, key, value) -> {
// only propagate the traceparent attr, no additional baggage, since SQS only supports a max of 10 attrs
if (key.startsWith("trace")) headersMap.put(key, value);
});
var converter = new SqsMessagingMessageConverter() {
@Override
public Message fromMessagingMessage(org.springframework.messaging.Message<?> message, MessageConversionContext context) {
Span span = tracing.tracer().nextSpan()
.kind(Span.Kind.PRODUCER)
.name("send")
.remoteServiceName("sqs")
.start();
Map<String, Object> newHeaders = new HashMap<>();
injector.inject(span.context(), newHeaders);
span.finish();
return super.fromMessagingMessage(MessageHeaderUtils.addHeadersIfAbsent(message, newHeaders), context);
}
};
converter.setObjectMapper(objectMapper);
return SqsTemplate.builder()
.sqsAsyncClient(sqsAsyncClient)
.messageConverter(converter)
.build();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment