/** * Fetch messages from the queue within the store scope. * @param string $queue Name of the AMQP queue * @param Mage_Core_Model_Store $store * @return self */ protected function _consumeQueue($queue, Mage_Core_Model_Store $store) { $sdk = $this->_helper->getSdkAmqp($queue, $store); $payloads = $sdk->fetch(); // avoid use of foreach to allow exception handling during Current while ($payloads->valid()) { try { $payload = $payloads->current(); } catch (Exception\Payload $e) { // log and skip over any messages that cannot be handled by the SDK $logData = ['queue' => $queue, 'error_message' => $e->getMessage()]; $logMessage = 'Received bad payload on queue {queue}: {error_message}'; $this->_logger->warning($logMessage, $this->_context->getMetaData(__CLASS__, $logData, $e)); $payloads->next(); continue; } $this->_dispatchPayload($payload, $store); $payloads->next(); } return $this; }
/** * Validate the hostname, username and password all appear valid. * @param string $hostname * @param string $username * @param string $password * @throws EbayEnterprise_Amqp_Exception_Connection_Exception * @return self */ protected function _validateConnection($hostname, $username, $password) { $queues = $this->_helper->getConfigModel($this->_store)->queueNames; if (!$queues) { throw Mage::exception('EbayEnterprise_Amqp_Exception_Configuration', $this->_helper->__(self::NO_QUEUES_CONFIGURED)); } // try to connect using the first configured queue - which one it is doesn't // matter much as no messages will be consumed $amqpApi = $this->_helper->getSdkAmqp(current($queues), $this->_store, $hostname, $username, $password); try { $amqpApi->openConnection(); } catch (ConnectionError $e) { $logData = ['error_message' => $e->getMessage()]; $logMessage = 'Failed to connect to AMQP server with message: {error_message}'; $this->_logger->warning($logMessage, $this->_context->getMetaData(__CLASS__, $logData, $e)); } if (!$amqpApi->isConnected()) { throw Mage::exception('EbayEnterprise_Amqp_Exception_Connection', $this->_helper->__(self::CONNECTION_FAILED)); } return $this; }