Запланированная задача Shopware 6 не запущена - PullRequest
1 голос
/ 17 июня 2020

У меня нет запланированной задачи для запуска в моем модуле. Я следил за документацией:

https://docs.shopware.com/en/shopware-platform-dev-en/how-to/scheduled-tasks

и:

https://docs.shopware.com/en/shopware-platform-dev-en/references-internals/core/module/tasks

Но похоже, что задача никогда не запускается (я добавил логирование, чтобы убедиться). Задача отображается в таблице базы данных «schedule_task» со статусом «в очереди» и значением last_execution_time «NULL». Похоже, что другие запланированные задачи (например, delete_newsletter_recipient_task, Requeue_dead_messages, product_export_generate_task, shopware.sitemap_generate и shopware.elasticsearch.create.alias) выполняются. Также, если я вручную запустил метод DownloadFeedTaskHandler «run», код будет работать должным образом.

Я нашел это сообщение на форуме (на немецком языке) с более или менее такой же проблемой, но без решения: 1018 *https://forum.shopware.com/discussion/67988/scheduled-task-hat-den-queued-status

Я проверил таблицу dead_messages, но в ней нет никаких записей.

Есть идеи, как отсюда go?

Мои соответствующие файлы выглядят так:

custom / plugins / AWSamplePlugin / src / Resources / config / services. xml:

<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="AW\SamplePlugin\ScheduledTask\DownloadFeedTask">
            <tag name="shopware.scheduled.task" />
        </service>
        <service id="AW\SamplePlugin\ScheduledTask\DownloadFeedTaskHandler">
            <argument type="service" id="scheduled_task.repository" />
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" />
            <argument type="service" id="logger" />
            <argument type="service" id="sales_channel.repository" />
            <tag name="messenger.message_handler" />
        </service>
    </services>
</container>

custom / plugins / AWSamplePlugin / src / ScheduledTask / DownloadFeedTask. php:

<?php declare(strict_types=1);

namespace AW\SamplePlugin\ScheduledTask;

use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTask;

class DownloadFeedTask extends ScheduledTask
{
    public static function getTaskName(): string
    {
        return 'aw.download_feed';
    }

    public static function getDefaultInterval(): int
    {
        return 60; // Every minute
    }
}

custom / plugins / AWSamplePlugin / src / ScheduledTask / DownloadFeedTaskHandler. php:

<?php declare(strict_types=1);

namespace AW\SamplePlugin\ScheduledTask;

use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTaskHandler;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Psr\Log\LoggerInterface;

class DownloadFeedTaskHandler extends ScheduledTaskHandler
{
    protected $systemConfigService;
    protected $logger;
    protected $salesChannelRepository;

    public function __construct(
        EntityRepositoryInterface $scheduledTaskRepository,
        SystemConfigService $systemConfigService,
        LoggerInterface $logger,
        EntityRepositoryInterface $salesChannelRepository
    ) {
        $logger->info('__construct');
        parent::__construct($scheduledTaskRepository);
        $this->systemConfigService = $systemConfigService;
        $this->logger = $logger;
        $this->salesChannelRepository = $salesChannelRepository;
        $logger->info('__construct END');
    }

    public static function getHandledMessages(): iterable
    {
        return [ DownloadFeedTask::class ];
    }

    public function run(): void
    {
        $this->logger->info('RUNNING!');
        echo "ScheduledTask run";
    }
}

1 Ответ

0 голосов
/ 10 июля 2020

Когда ScheduledTask застревает в состоянии очереди, скорее всего, сообщение, сгенерированное этой задачей, не было обработано.

Чтобы использовать сообщения, используйте bin/console messenger:consume, вы можете использовать флаг -vv для просмотра сообщений которые обрабатываются.

Для получения дополнительной информации о том, как использовать сообщения, обратитесь к этой статье документации .

Это необходимо, потому что команда bin/console scheduled-task:run проверяет только запланированные задачи должны выполняться и заботиться о планировании, но для фактического выполнения этих задач команда отправляет сообщения в очередь сообщений, а задача затем запускается, когда вы потребляете эти сообщения из очереди.

...