getProducer(); /** @var DelayStamp|null $delayStamp */ $delayStamp = $envelope->last(DelayStamp::class); $delay = null !== $delayStamp ? $delayStamp->getDelay() : 0; if (null === $envelope->last(NsqReceivedStamp::class)) { $encodedMessage = $this->serializer->encode($envelope); $encodedMessage = json_encode($encodedMessage, JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE); wait($producer->publish($this->topic, $encodedMessage, $delay)); } else { $message = NsqReceivedStamp::getMessageFromEnvelope($envelope); if (!$message->isProcessed()) { wait($message->requeue($delay)); } } return $envelope; } private function getProducer(): Producer { if (null === $this->producer) { $this->producer = new Producer( $this->address, $this->clientConfig, $this->logger, ); } wait($this->producer->connect()); return $this->producer; } }