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('Consumer with the same PID is running'); 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( <<%command.full_name% someConsumer To specify the number of messages which should be processed by consumer before its termination: %command.full_name% someConsumer --max-messages=50 To specify the number of messages per batch for the batch consumer: %command.full_name% someConsumer --batch-size=500 To specify the preferred area: %command.full_name% someConsumer --area-code='adminhtml' To save PID enter path: %command.full_name% someConsumer --pid-file-path='/var/someConsumer.pid' HELP ); parent::configure(); } }