Support for asynchronous message communication with Spring Cloud Stream on RabbitMQ

Hi everyone,
according to Does Elastic APM support Spring Cloud Stream? the current Java Agent (elastic-apm-agent-1.12.0.jar and Elastic 7.5.1) does not support creation of transactions and spans from asynchronous message communication .

We have a Spring Boot microservice landscape where almost everything communicates with Spring Cloud Stream on RabbitMQ. This means, that transactions are only visible at the Rest Endpoint service right now, and all other invoked services are not shown in APM.

Since I read at Setup APM distributed tracing to work with kafka and multiple node services that you are working on integrating Kafka, what about RabbitMQ and Spring Cloud Stream ? Is it already implemented?
If not, do you know of any attempts to integrate Spring Cloud Stream in the Java Agent?

The Kafka integration is almost done but we have not started with Rabbit MQ yet. It's on the roadmap, but we don't have a date for it yet.

You could use our API to manually create transactions and spans for RabbitMQ: https://www.elastic.co/guide/en/apm/agent/java/current/public-api.html

Can you show, where the Kafka integration was implemented ? Maybe it is possible for us to adapt that quick&dirty to RabbitMQ .

Here's the implementation for Kafka: https://github.com/elastic/apm-agent-java/tree/master/apm-agent-plugins/apm-kafka-plugin

@DannyT if you are relying on the Kafka plugin, be aware that the internal APIs we use to compute the outgoing trace context header and create a transaction based on it in the consumer side are about to change.
In addition, it uses binary headers, as this is what expected in Kafka. If you need to send text headers, you can use out API, as described in this topic for example.

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.