How can you use one sentry transaction between microservices communicating using rabbitmq?
I tried:
Producer middleware:
public function handleProducerMessage(Envelope $envelope, StackInterface $stack): Envelope
{
$transaction = SentrySdk::getCurrentHub()->getTransaction();
if (!is_null($transaction)) {
$spanContext = new SpanContext();
$spanContext->setOp('rabbitmq.send');
$spanContext->setDescription('description');
$span = $transaction->startChild($spanContext);
$sentryTrace = $span->toTraceparent();
$envelope = $envelope->with(new SentryStamp($sentryTrace));
$envelope = $stack->next()->handle($envelope, $stack);
$span->finish();
return $envelope;
}
return $stack->next()->handle($envelope, $stack);
}
Consumer Middleware:
public function consume(Envelope $envelope, StackInterface $stack): Envelope
{
/** @var $sentryStamp SentryStamp */
$sentryStamp = $envelope->last(SentryStamp::class);
if (!is_null($sentryStamp)) {
$sentryTrace = $sentryStamp->getSentryTrace();
$transactionContext = TransactionContext::fromSentryTrace($sentryTrace);
$transactionContext->setOp('rabbitmq.consumer');
$transactionContext->setDescription('description');
$transaction = SentrySdk::getCurrentHub()->startTransaction($transactionContext);
SentrySdk::getCurrentHub()->setSpan($transaction);
$spanContext = new SpanContext();
$spanContext->setOp('processing');
$spanContext->setDescription("description");
$span = $transaction->startChild($spanContext);
SentrySdk::getCurrentHub()->setSpan($span);
$envelope = $stack->next()->handle($envelope, $stack);
$span->finish();
$transaction->finish();
return $envelope;
}
return $stack->next()->handle($envelope, $stack);
}
But consumer create new transaction. Dont use current transaction. How to send transaction between 2 microservice with rabbitmq?