Symfony 命令不发送所有跟踪请求

Symfony command doesn't send all tracking requests

我正在使用 symfony 3.4(我知道,需要升级,我们正在努力)。作为 cron 作业,我每个月都会向 运行 编写一个 shell 命令。

我有以下代码:

// ConnectivityInventoryCommand.php

protected function execute(InputInterface $input, OutputInterface $output)
{
    try {
        $connectivityInventoryList = $this->connectivityInventoryService->generateInventoryReport($startDate, $endDate);
        $this->connectivityInventoryUploadService->uploadInventoryReport($connectivityInventoryList, $endDate);

        $metrics = $this->pushMetrics($this->prepareMetrics($connectivityInventoryList));

        /** @var Output $output */
        $output->result(sprintf("Job finished successfully"), null, $this->metricsToArray($metrics));
    } catch(Exception $exception) {
        $output->result(sprintf("Job failed with exception: %s", $exception->getMessage()));
    }
}

uploadInventoryReport方法中,连接到FTP服务器,上传文件,当文件上传成功后,执行这段代码。

foreach ($this->getPartnerEmailsAsArray($partnerConnectivityInventory->getPartnerEmail()) as $partnerEmail) {
    $payload = (new TrackingPayload())
        ->setProperties(
             (new ConnectivityInventoryProperties())
                 ->setPartnerId($partnerConnectivityInventory->getPartnerId())
                 ->setPartnerName($partnerConnectivityInventory->getPartnerName())
                 ->setLanguage('en-US')
                 ->setEmail($partnerEmail)
                 ->setLink($absoluteFilePath)
         );
     $this->trackingService->track($payload);
}

跟踪服务是一个 Segment PHP 客户端。

我希望跟踪 9 个分段事件,但在任何给定的 运行 中我得到 6 - 8 个事件。我知道有 9 封电子邮件,因为如果我调试,它会进入循环 9 次,有 9 个不同的电子邮件地址。

除段事件外,一切正常。

我试图在 foreach 的末尾添加一个睡眠,但这仍然无济于事。我还在 execute 方法的末尾添加了一个睡眠,认为它可能在发出调用之前就快死了,但是方法末尾的睡眠似乎只是将段标注延迟到睡眠已经过去了。

我是否遗漏了什么或没有完全正确理解?

万一有人想解决这个问题,这就是我的认识和解决方法。

似乎 the client 没有抽出时间在命令完成之前正确刷新所有内容。我不是 100% 确定内部结构,但我的修复让我觉得它与此有关。

$this->trackingService(链接客户端的包装器)中,我添加了一个名为 forceFlush() 的函数,它只调用 Segment::flush()。我在execute方法中的try-catch末尾调用了这个方法。

一调用,所有期望值都出现在segment中。