У меня нет запланированной задачи для запуска в моем модуле. Я следил за документацией:
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";
}
}