public function put(
        string $className,
        array $data,
        ?string $jid = null,
        ?int $delay = null,
        ?int $retries = null,
        ?int $priority = null,
        ?array $tags = null,
        ?array $depends = null
    ) {
        try {
            $jid = $jid ?: str_replace('-', '', Uuid::uuid4()->toString());
        } catch (\Exception $e) {
            throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
        }

        $data = new JobData($data);
        $this->getEventsManager()->fire(new QueueEvent\BeforeEnqueue($this, $jid, $data, $className));

        if (!$putData = json_encode($data, JSON_UNESCAPED_SLASHES)) {
            throw new RuntimeException(
                sprintf(
                    'Unable to encode payload to put the described job "%s" to the "%s" queue.',
                    $jid,
                    $this->name
                )
            );
        }

        $jid = $this->client->put(
            '',
            $this->name,
            $jid,
            $className,
            $putData,
            is_null($delay) ? 0 : $delay,
            'priority',
            is_null($priority) ? 0 : $priority,
            'tags',
            json_encode($tags ?: [], JSON_UNESCAPED_SLASHES),
            'retries',
            is_null($retries) ? 5 : $retries,
            'depends',
            json_encode($depends ?: [], JSON_UNESCAPED_SLASHES)
        );

        $this->getEventsManager()->fire(new QueueEvent\AfterEnqueue($this, $jid, $data->toArray(), $className));

        return $jid;
    }