/**
* {@inheritdoc}
*/
public function publish($msgBody, $routingKey = '', $additionalProperties = array())
{
$message = new AMQPMessage((string) $msgBody, array_merge($additionalProperties, ['routing_key' => $routingKey]));
$span = $this->amqpSpanFactory->fromProducedMessage($message);
if (!array_key_exists('application_headers', $additionalProperties)) {
$additionalProperties['application_headers'] = new AMQPTable();
} elseif (!$additionalProperties['application_headers'] instanceof AMQPTable) {
throw new \InvalidArgumentException('Your `application_headers` must be an `AMQPTable`');
}
$headers = $additionalProperties['application_headers'];
$headers->set('X-B3-SpanId', (string) $span->getIdentifier());
$headers->set('X-B3-TraceId', (string) $span->getTraceIdentifier());
$headers->set('X-B3-ParentSpanId', (string) $span->getParentIdentifier());
$headers->set('X-B3-Flags', $span->getDebug() ? '1' : '0');
$result = $this->decoratedProducer->publish($msgBody, $routingKey, $additionalProperties);
$this->tracer->trace([$span]);
return $result;
}