123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\MessageQueue\Console;
- use Symfony\Component\Console\Command\Command;
- use Symfony\Component\Console\Input\InputArgument;
- use Symfony\Component\Console\Input\InputInterface;
- use Symfony\Component\Console\Input\InputOption;
- use Symfony\Component\Console\Output\OutputInterface;
- use Magento\Framework\MessageQueue\ConsumerFactory;
- use Magento\MessageQueue\Model\Cron\ConsumersRunner\PidConsumerManager;
- /**
- * Command for starting MessageQueue consumers.
- */
- class StartConsumerCommand extends Command
- {
- const ARGUMENT_CONSUMER = 'consumer';
- const OPTION_NUMBER_OF_MESSAGES = 'max-messages';
- const OPTION_BATCH_SIZE = 'batch-size';
- const OPTION_AREACODE = 'area-code';
- const PID_FILE_PATH = 'pid-file-path';
- const COMMAND_QUEUE_CONSUMERS_START = 'queue:consumers:start';
- /**
- * @var ConsumerFactory
- */
- private $consumerFactory;
- /**
- * @var \Magento\Framework\App\State
- */
- private $appState;
- /**
- * @var PidConsumerManager
- */
- private $pidConsumerManager;
- /**
- * StartConsumerCommand constructor.
- * {@inheritdoc}
- *
- * @param \Magento\Framework\App\State $appState
- * @param ConsumerFactory $consumerFactory
- * @param string $name
- * @param PidConsumerManager $pidConsumerManager
- */
- public function __construct(
- \Magento\Framework\App\State $appState,
- ConsumerFactory $consumerFactory,
- $name = null,
- PidConsumerManager $pidConsumerManager = null
- ) {
- $this->appState = $appState;
- $this->consumerFactory = $consumerFactory;
- $this->pidConsumerManager = $pidConsumerManager ?: \Magento\Framework\App\ObjectManager::getInstance()
- ->get(PidConsumerManager::class);
- parent::__construct($name);
- }
- /**
- * {@inheritdoc}
- */
- protected function execute(InputInterface $input, OutputInterface $output)
- {
- $consumerName = $input->getArgument(self::ARGUMENT_CONSUMER);
- $numberOfMessages = $input->getOption(self::OPTION_NUMBER_OF_MESSAGES);
- $batchSize = (int)$input->getOption(self::OPTION_BATCH_SIZE);
- $areaCode = $input->getOption(self::OPTION_AREACODE);
- $pidFilePath = $input->getOption(self::PID_FILE_PATH);
- if ($pidFilePath && $this->pidConsumerManager->isRun($pidFilePath)) {
- $output->writeln('<error>Consumer with the same PID is running</error>');
- return \Magento\Framework\Console\Cli::RETURN_FAILURE;
- }
- if ($pidFilePath) {
- $this->pidConsumerManager->savePid($pidFilePath);
- }
- if ($areaCode !== null) {
- $this->appState->setAreaCode($areaCode);
- } else {
- $this->appState->setAreaCode('global');
- }
- $consumer = $this->consumerFactory->get($consumerName, $batchSize);
- $consumer->process($numberOfMessages);
- return \Magento\Framework\Console\Cli::RETURN_SUCCESS;
- }
- /**
- * {@inheritdoc}
- */
- protected function configure()
- {
- $this->setName(self::COMMAND_QUEUE_CONSUMERS_START);
- $this->setDescription('Start MessageQueue consumer');
- $this->addArgument(
- self::ARGUMENT_CONSUMER,
- InputArgument::REQUIRED,
- 'The name of the consumer to be started.'
- );
- $this->addOption(
- self::OPTION_NUMBER_OF_MESSAGES,
- null,
- InputOption::VALUE_REQUIRED,
- 'The number of messages to be processed by the consumer before process termination. '
- . 'If not specified - terminate after processing all queued messages.'
- );
- $this->addOption(
- self::OPTION_BATCH_SIZE,
- null,
- InputOption::VALUE_REQUIRED,
- 'The number of messages per batch. Applicable for the batch consumer only.'
- );
- $this->addOption(
- self::OPTION_AREACODE,
- null,
- InputOption::VALUE_REQUIRED,
- 'The preferred area (global, adminhtml, etc...) '
- . 'default is global.'
- );
- $this->addOption(
- self::PID_FILE_PATH,
- null,
- InputOption::VALUE_REQUIRED,
- 'The file path for saving PID'
- );
- $this->setHelp(
- <<<HELP
- This command starts MessageQueue consumer by its name.
- To start consumer which will process all queued messages and terminate execution:
- <comment>%command.full_name% someConsumer</comment>
- To specify the number of messages which should be processed by consumer before its termination:
- <comment>%command.full_name% someConsumer --max-messages=50</comment>
- To specify the number of messages per batch for the batch consumer:
- <comment>%command.full_name% someConsumer --batch-size=500</comment>
- To specify the preferred area:
- <comment>%command.full_name% someConsumer --area-code='adminhtml'</comment>
- To save PID enter path:
- <comment>%command.full_name% someConsumer --pid-file-path='/var/someConsumer.pid'</comment>
- HELP
- );
- parent::configure();
- }
- }
|