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를 설정하고 검증하십시오. 별도의 플래그가 팩터리가 반환한 임의의 소켓을 변환한다고 가정할 수는 없습니다. 풀이라면 대체 연결까지 포함해 팩터리 호출마다 새 소켓으로 이 생명주기를 반복하십시오.

전역 ProxySelector 에서의 HTTP 선택은 이 작업의 대체 구현이 아닙니다. Redis는 자신의 소켓으로 RESP를 보냅니다. 그렇다고 해서 HTTP가 되거나 CONNECT를 협상하지는 않습니다.

관련 글