public function getEnvelope() { if (!$this->envelope) { $class = $this->envelope_skeleton; $this->envelope = new $class($this->original->getExchangeName(), $this->original->getRoutingKey(), $this->original->getDeliveryTag(), $this->original->isRedelivery()); } return $this->envelope; }
public static function castEnvelope(\AMQPEnvelope $c, array $a, Stub $stub, $isNested, $filter = 0) { $prefix = Caster::PREFIX_VIRTUAL; if (!($filter & Caster::EXCLUDE_VERBOSE)) { $a += array($prefix . 'body' => $c->getBody()); } $a += array($prefix . 'routingKey' => $c->getRoutingKey(), $prefix . 'deliveryTag' => $c->getDeliveryTag(), $prefix . 'deliveryMode' => new ConstStub($c->getDeliveryMode() . (2 === $c->getDeliveryMode() ? ' (persistent)' : ' (non-persistent)'), $c->getDeliveryMode()), $prefix . 'exchangeName' => $c->getExchangeName(), $prefix . 'isRedelivery' => $c->isRedelivery(), $prefix . 'contentType' => $c->getContentType(), $prefix . 'contentEncoding' => $c->getContentEncoding(), $prefix . 'type' => $c->getType(), $prefix . 'timestamp' => $c->getTimestamp(), $prefix . 'priority' => $c->getPriority(), $prefix . 'expiration' => $c->getExpiration(), $prefix . 'userId' => $c->getUserId(), $prefix . 'appId' => $c->getAppId(), $prefix . 'messageId' => $c->getMessageId(), $prefix . 'replyTo' => $c->getReplyTo(), $prefix . 'correlationId' => $c->getCorrelationId(), $prefix . 'headers' => $c->getHeaders()); return $a; }
/** * @param \AMQPEnvelope $envelope * @param \AMQPQueue $queue * @param string $m */ public function publish($envelope, $queue, $m) { if ($m instanceof AmqpResp) { $m = Json::encode($m->getData()); } elseif (is_object($m) || is_array($m)) { $m = Json::encode($m); } $chanel = $this->getChanel(); // Точка доступа // Точка обмена $exchange = new \AMQPExchange($chanel); $exchange->setFlags(AMQP_AUTODELETE | AMQP_DURABLE); $attributes = array('correlation_id' => $envelope->getCorrelationId()); $routingKey = $envelope->getReplyTo(); if ($exchange->publish($m, $routingKey, AMQP_NOPARAM, $attributes)) { $queue->ack($envelope->getDeliveryTag()); } }
public function fromEnvelope(\AMQPEnvelope $envelope) { $this->setAppId($envelope->getAppId()); $this->setBody($envelope->getBody()); $this->setContentEncoding($envelope->getContentEncoding()); $this->setContentType($envelope->getContentType()); $this->setCorrelationId($envelope->getCorrelationId()); $this->setDeliveryMode($envelope->getDeliveryMode()); $this->setDeliveryTag($envelope->getDeliveryTag()); $this->setExchangeName($envelope->getExchangeName()); $this->setExpiration($envelope->getExpiration()); $this->setHeaders($envelope->getHeaders()); $this->setMessageId($envelope->getMessageId()); $this->setPriority($envelope->getPriority()); $this->setReplyTo($envelope->getReplyTo()); $this->setRoutingKey($envelope->getRoutingKey()); $this->setTimeStamp($envelope->getTimeStamp()); $this->setType($envelope->getType()); $this->setUserId($envelope->getUserId()); $this->setRedelivery($envelope->isRedelivery()); return $this; }
/** * @param \AMQPEnvelope $envelope * @return string */ public static function envelopeToString(\AMQPEnvelope $envelope) { $m = ''; $m .= 'AppId: ' . $envelope->getAppId() . "\n"; $m .= 'Body: ' . $envelope->getBody() . "\n"; $m .= 'ContentEncoding: ' . $envelope->getContentEncoding() . "\n"; $m .= 'ContentType: ' . $envelope->getContentType() . "\n"; $m .= 'CorrelationId: ' . $envelope->getCorrelationId() . "\n"; $m .= 'DeliveryTag: ' . $envelope->getDeliveryTag() . "\n"; $m .= 'ExchangeName: ' . $envelope->getExchangeName() . "\n"; $m .= 'Expiration: ' . $envelope->getExpiration() . "\n"; $m .= 'Headers: ' . json_encode($envelope->getHeaders()) . "\n"; $m .= 'MessageId: ' . $envelope->getMessageId() . "\n"; $m .= 'Priority: ' . $envelope->getPriority() . "\n"; $m .= 'ReplyTo: ' . $envelope->getReplyTo() . "\n"; $m .= 'RoutingKey: ' . $envelope->getRoutingKey() . "\n"; $m .= 'TimeStamp: ' . $envelope->getTimeStamp() . "\n"; $m .= 'Type: ' . $envelope->getType() . "\n"; $m .= 'UserId: ' . $envelope->getUserId() . "\n"; $m .= 'isRedelivery: ' . $envelope->isRedelivery() . "\n"; $m .= "\n"; return $m; }
function callback(AMQPEnvelope $message, AMQPQueue $q) { //say that message received $q->ack($message->getDeliveryTag()); }
/** * Convert AMQP message to internal message format * * @param \AMQPEnvelope $envelope * * @return BaseMessage */ public static function convert(\AMQPEnvelope $envelope) { $message = new BaseMessage(); $message->setPayload($envelope->getBody())->setDeliveryMode($envelope->getDeliveryMode())->setHeaders($envelope->getHeaders())->setProperties(['content_type' => $envelope->getContentType(), 'content_encoding' => $envelope->getContentEncoding(), 'app_id' => $envelope->getAppId(), 'correlation_id' => $envelope->getCorrelationId(), 'delivery_tag' => $envelope->getDeliveryTag(), 'message_id' => $envelope->getMessageId(), 'priority' => $envelope->getPriority(), 'reply_to' => $envelope->getReplyTo(), 'routing_key' => $envelope->getRoutingKey(), 'exchange_name' => $envelope->getExchangeName(), 'timestamp' => $envelope->getTimeStamp(), 'type' => $envelope->getType(), 'user_id' => $envelope->getUserId()]); return $message; }
/** * @param \AMQPEnvelope $message * @throws \Exception */ protected function processFailedSubscription(\AMQPEnvelope $message) { if (!$this->connection->isConnected()) { $this->connection->connect(); } $attempt = $message->getHeader('redelivery_counter') ? $message->getHeader('redelivery_counter') : 1; if ($attempt < 3) { $headers = $message->getHeaders(); $headers['redelivery_counter'] = ++$attempt; $attributes = array_merge($this->messageAttributes, ['content_type' => $message->getContentType(), 'headers' => $headers]); $this->getExchange()->publish($message->getBody(), $message->getRoutingKey(), AMQP_NOPARAM, $attributes); } $this->getQueue()->ack($message->getDeliveryTag()); }
/** * @param \AMQPEnvelope $message * @param MessageEncodeDecodeStrategy|null $decodeStrategy * * @return static * @throws \yii\base\InvalidConfigException */ public static function createFromRaw(\AMQPEnvelope $message, $decodeStrategy = null) { return \Yii::createObject(['class' => static::class, 'body' => $message->getBody(), 'routingKey' => $message->getRoutingKey(), 'deliveryTag' => $message->getDeliveryTag(), 'deliveryMode' => $message->getDeliveryMode(), 'exchangeName' => $message->getExchangeName(), 'redelivery' => $message->isRedelivery(), 'contentType' => $message->getContentType(), 'contentEncoding' => $message->getContentEncoding(), 'type' => $message->getType(), 'timestamp' => $message->getTimeStamp(), 'priority' => $message->getPriority(), 'expiration' => $message->getExpiration(), 'userId' => $message->getUserId(), 'appId' => $message->getAppId(), 'messageId' => $message->getMessageId(), 'replyTo' => $message->getReplyTo(), 'correlationId' => $message->getCorrelationId(), 'headers' => $message->getHeaders(), 'decodeStrategy' => $decodeStrategy]); }
/** * Implements all the needed behaviors for processing messages in case of errors * This method will nack all the provious messages or ack all the previous messages in the case of a failed message * The results can be surprising. * * @param AMQPEnvelope $message The message to be processed * @param bool|int $result The reply from the processor * * @return void */ protected function processError(\AMQPEnvelope $message, $result) { if (isset($this->configuration['onProcessError'])) { $stopOnError = $this->configuration['onProcessError']; // set up a sensible default $action = 'error'; switch ($result) { case Processor::CRIT_INTERNAL_SERVER_ERROR: if (isset($stopOnError['crit_internal_server_error'])) { $action = $stopOnError['crit_internal_server_error']; } break; case Processor::CRIT_NOT_IMPLEMENTED: if (isset($stopOnError['crit_not_implemented'])) { $action = $stopOnError['crit_not_implemented']; } break; case Processor::ERR_BAD_REQUEST: if (isset($stopOnError['err_bad_request'])) { $action = $stopOnError['err_bad_request']; } break; case Processor::ERR_NOT_FOUND: if (isset($stopOnError['err_not_found'])) { $action = $stopOnError['err_not_found']; } break; } switch ($action) { case 'error': $this->queue->nack($message->getDeliveryTag(), AMQP_MULTIPLE); $this->nackCounter = 0; break; case 'requeue': $this->queue->nack($message->getDeliveryTag(), AMQP_REQUEUE | AMQP_MULTIPLE); $this->nackCounter = 0; break; case 'stop': $this->queue->nack($message->getDeliveryTag(), AMQP_MULTIPLE); exit(1); case 'continue': default: $this->queue->ack($message->getDeliveryTag(), AMQP_MULTIPLE); // reset the nack counter $this->nackCounter = 0; break; } } else { $this->queue->nack($message->getDeliveryTag()); } }
/** * @inheritdoc */ public function getDeliveryTag() { return $this->delegate->getDeliveryTag(); }
/** * @param AMQPEnvelope $incoming * @return AMQPIncomingMessage */ public static function convert(AMQPEnvelope $incoming) { $data = array(AMQPIncomingMessage::APP_ID => $incoming->getAppId(), AMQPIncomingMessage::BODY => $incoming->getBody(), AMQPIncomingMessage::CONTENT_ENCODING => $incoming->getContentEncoding(), AMQPIncomingMessage::CONTENT_TYPE => $incoming->getContentType(), AMQPIncomingMessage::CORRELATION_ID => $incoming->getCorrelationId(), AMQPIncomingMessage::DELIVERY_TAG => $incoming->getDeliveryTag(), AMQPIncomingMessage::DELIVERY_MODE => $incoming->getDeliveryMode(), AMQPIncomingMessage::EXCHANGE => $incoming->getExchangeName(), AMQPIncomingMessage::EXPIRATION => $incoming->getExpiration(), AMQPIncomingMessage::MESSAGE_ID => $incoming->getMessageId(), AMQPIncomingMessage::PRIORITY => $incoming->getPriority(), AMQPIncomingMessage::REPLY_TO => $incoming->getReplyTo(), AMQPIncomingMessage::REDELIVERED => $incoming->isRedelivery(), AMQPIncomingMessage::PRIORITY => $incoming->getPriority(), AMQPIncomingMessage::ROUTING_KEY => $incoming->getRoutingKey(), AMQPIncomingMessage::TIMESTAMP => $incoming->getTimeStamp(), AMQPIncomingMessage::TYPE => $incoming->getType(), AMQPIncomingMessage::USER_ID => $incoming->getUserId()); return AMQPIncomingMessage::spawn($data); }
/** * Nacks the message * * @param AMQPEnvelope $envelope * * @return void */ public function nack(AMQPEnvelope $envelope) { $this->_queues[$this->_consumerQueue]->nack($envelope->getDeliveryTag()); }