【问题标题】:Symfony command doesn't send all tracking requestsSymfony 命令不会发送所有跟踪请求
【发布时间】:2021-02-06 15:28:37
【问题描述】:

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

我有以下代码:

// 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-method 的末尾添加了一个 sleep已经过去了。

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

【问题讨论】:

    标签: php symfony-3.4 segment


    【解决方案1】:

    如果有人希望解决这个问题,这就是我意识到的以及我如何解决它的。

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

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

    一旦调用,所有预期值都会出现在段中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2011-04-28
      相关资源
      最近更新 更多