消费者队列中的Datadog跟踪

问题描述 投票:0回答:1

我有脚本consumer.php(来自rabbit的监听队列)

<?php

namespace App\Queue\Receivers;

class CronReceiver extends BaseReceiver
{
    public function handle(AMQPMessage $msg): void
    {
        //logic
    }
}

消费者可以工作很长时间(直到出现错误或强制重启)

只有这样,痕迹才会到达datadog

我想将每条收到的消息的跟踪发送到 datadog,而无需重新启动脚本 这可能吗?有人可以告诉我该怎么做吗?

我尝试

public function handle(AMQPMessage $msg): void
    {
        $tracer = new Tracer();
        $tracer->startActiveSpan('run');
        \DDTrace\GlobalTracer::set($tracer);
        //logic
        var_dump($tracer->getActiveSpan());
        $tracer->getActiveSpan()->finish();
        $tracer->flush();
    }

如果我使用这些参数,我能够在第一次迭代后立即发送跟踪,但在后续迭代中什么也没有到达

php rabbitmq datadog
1个回答
0
投票

我成功了。 我正在使用 datadog/dd-trace 库

现在我的代码如下所示:

    public function handle(AMQPMessage $msg): void
{
        $tracer = new \DDTrace\Tracer();
        $scope = $tracer->startActiveSpan('run');
        $span = $scope->getSpan();
        $span->setTag('service.name', 'myServiceName');
        //logic queue consumer
        $scope->close();
        $tracer->flush();
}

现在我将脚本的每次迭代作为单独的跟踪

© www.soinside.com 2019 - 2024. All rights reserved.