Что должна возвращать фабрика SOCKS-сокетов для Jedis
Jedis 5.2.0 ожидает подключённый сокет, готовый для Redis, включая TLS при необходимости; один лишь выбор прокси не даёт такого соединения.
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.