mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
83 lines
2.4 KiB
PHP
83 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\MessageQueue\Model;
|
|
|
|
use Magento\Framework\MessageQueue\ConsumerFactory;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\Framework\App\MaintenanceMode;
|
|
use Magento\Framework\App\ObjectManager;
|
|
|
|
/**
|
|
* Consumer runner class is used to run consumer, which name matches the magic method invoked on this class.
|
|
*
|
|
* Is used to schedule consumers execution in crontab.xml as follows:
|
|
* <code>
|
|
* <job name="consumerConsumerName" instance="Magento\MessageQueue\Model\ConsumerRunner" method="consumerName">
|
|
* </code>
|
|
* Where <i>consumerName</i> should be a valid name of consumer registered in some queue.xml
|
|
*
|
|
* @api
|
|
* @since 100.0.2
|
|
*/
|
|
class ConsumerRunner
|
|
{
|
|
/**
|
|
* @var ConsumerFactory
|
|
*/
|
|
private $consumerFactory;
|
|
|
|
/**
|
|
* @var MaintenanceMode
|
|
*/
|
|
private $maintenanceMode;
|
|
|
|
/**
|
|
* @var integer
|
|
*/
|
|
private $maintenanceSleepInterval;
|
|
|
|
/**
|
|
* Initialize dependencies.
|
|
*
|
|
* @param ConsumerFactory $consumerFactory
|
|
* @param MaintenanceMode $maintenanceMode
|
|
* @param integer $maintenanceSleepInterval
|
|
*/
|
|
public function __construct(
|
|
ConsumerFactory $consumerFactory,
|
|
MaintenanceMode $maintenanceMode = null,
|
|
$maintenanceSleepInterval = 30
|
|
) {
|
|
$this->consumerFactory = $consumerFactory;
|
|
$this->maintenanceMode = $maintenanceMode ?: ObjectManager::getInstance()->get(MaintenanceMode::class);
|
|
$this->maintenanceSleepInterval = $maintenanceSleepInterval;
|
|
}
|
|
|
|
/**
|
|
* Process messages in queue using consumer, which name is equal to the current magic method name.
|
|
*
|
|
* @param string $name
|
|
* @param array $arguments
|
|
* @throws LocalizedException
|
|
* @return void
|
|
*/
|
|
public function __call($name, $arguments)
|
|
{
|
|
try {
|
|
$consumer = $this->consumerFactory->get($name);
|
|
} catch (\Exception $e) {
|
|
$errorMsg = '"%callbackMethod" callback method specified in crontab.xml '
|
|
. 'must have corresponding consumer declared in some queue.xml.';
|
|
throw new LocalizedException(__($errorMsg, ['callbackMethod' => $name]));
|
|
}
|
|
if (!$this->maintenanceMode->isOn()) {
|
|
$consumer->process();
|
|
} else {
|
|
sleep($this->maintenanceSleepInterval);
|
|
}
|
|
}
|
|
}
|