JedisSocketFactory.createSocket должна возвращать подключённый сокет, готовый передавать трафик Redis. В Jedis 5.2.0 приложение передаёт эту фабрику и свою конфигурацию клиента Redis здесь:

var jedis = new Jedis(socksSocketFactory, redisConfig);

socksSocketFactory реализует redis.clients.jedis.JedisSocketFactory, а redisConfig — это JedisClientConfig приложения. Будьте готовы к подключению уже при запуске конструктора: он может сразу выполнить аутентификацию и другие настройки Redis.

Проследите один сокет от создания до передачи

Для маршрута SOCKS5 без аутентификации фабрика может создать java.net.Socket с явным посредником Proxy.Type.SOCKS, а затем подключиться к хосту и порту Redis. Оставьте адрес назначения неразрешённым если сервер SOCKS должен сам разрешить имя хоста.

Ограничьте попытку подключения и примените заданный тайм-аут чтения. Если соединение не удалось, закройте этот сокет и сообщите JedisConnectionException; интерфейс фабрики не объявляет проверяемый IOException.

Если Redis требует TLS, установите и проверьте TLS до возврата сокета. Нельзя предполагать, что отдельный флаг преобразует произвольный сокет, возвращённый фабрикой. Для пула повторяйте этот жизненный цикл с новым сокетом при каждом вызове фабрики, включая заменяющие соединения.

Выбор HTTP в глобальном ProxySelector не является альтернативной реализацией этой работы. Redis отправляет RESP через свой сокет; от этого он не становится HTTP и не согласует CONNECT.

Похожие статьи