serverConnection = $serverConnection; $this->logger = $logger; } public function publishMessage(array $payload, $queueName, $retryCount = null, $workerMessage = '') { // add published timestamp to all message payload $payload['payload']['published'] = time(); $msg = new AMQPMessage(json_encode($payload)); $routing = array_search($queueName, AMQPConnection::$defaultRetryQueues); if (count($retryCount) && $routing != false) { // add a message header information $headers = new AMQPTable([ 'x-death' => [ [ 'count' => $retryCount, 'exchange' => AMQPConnection::ALCHEMY_EXCHANGE, 'queue' => $routing, 'routing-keys' => $routing, 'reason' => 'rejected', // rejected is sended like nack 'time' => new \DateTime('now', new \DateTimeZone('UTC')) ] ], 'worker-message' => $workerMessage ]); $msg->set('application_headers', $headers); } $channel = $this->serverConnection->setQueue($queueName); if ($channel == null) { $this->pushLog("Can't connect to rabbit, check configuration!", "error"); return true; } $exchange = in_array($queueName, AMQPConnection::$defaultQueues) ? AMQPConnection::ALCHEMY_EXCHANGE : AMQPConnection::RETRY_ALCHEMY_EXCHANGE; $channel->basic_publish($msg, $exchange, $queueName); return true; } public function initializePullAssets() { $payload = [ 'message_type' => self::PULL_ASSETS_TYPE, 'payload' => [ 'initTimestamp' => new \DateTime('now', new \DateTimeZone('UTC')) ] ]; $this->publishMessage($payload, self::PULL_QUEUE); } public function connectionClose() { $this->serverConnection->connectionClose(); } /** * @param $message * @param string $method * @param array $context */ public function pushLog($message, $method = 'info', $context = []) { // write logs directly in file call_user_func(array($this->logger, $method), $message, $context); } public function publishFailedMessage(array $payload, AMQPTable $headers, $queueName) { $msg = new AMQPMessage(json_encode($payload)); $msg->set('application_headers', $headers); $channel = $this->serverConnection->setQueue($queueName); if ($channel == null) { $this->pushLog("Can't connect to rabbit, check configuration!", "error"); return ; } $channel->basic_publish($msg, AMQPConnection::RETRY_ALCHEMY_EXCHANGE, $queueName); } }