Конфигурация Redis SSL не ясна в случае SpringBoot с ядром салата - PullRequest
0 голосов
/ 28 мая 2020
  • Spring-boot: 2.0.3.RELEASE
  • lettuce-core: 5.0.4.RELEASE
  • spring-data-redis: 2.0.8.RELEASE

Итак, во-первых, моя проблема решена, я просто не понимаю, почему, и это меня беспокоит, поэтому некоторые пояснения по этому поводу приветствуются.

У меня есть этот Redis Конфигурация в одном из микросервисов, над которыми я работаю:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.resource.ClientResources;
import io.lettuce.core.resource.DefaultClientResources;

@Configuration
public class LettuceConfig {

    @Bean(destroyMethod = "shutdown")
    ClientResources clientResources() {
        return DefaultClientResources.create();
    }

    @Bean(destroyMethod = "shutdown")
    RedisClient redisClient(ClientResources clientResources) {
        String host = System.getenv("spring_redis_host") != null ? System.getenv("spring_redis_host") : "127.0.0.1";
        String port = System.getenv("spring_redis_port") != null ? System.getenv("spring_redis_port") : "6379";
        String password = System.getenv("spring_redis_password") != null ? System.getenv("spring_redis_password") : "";
        Boolean isLocal = host.equals("127.0.0.1");

        RedisURI redisUri = RedisURI.Builder.redis(host).withSsl(!isLocal).withPassword(password).withPort(Integer.parseInt(port))
                .build();
        return RedisClient.create(clientResources, redisUri);
    }

    @Bean(destroyMethod = "close")
    StatefulRedisConnection<String, String> connection(RedisClient redisClient) {
        return redisClient.connect();
    }
}

После добавления исполнительного механизма в проект я понял, что сервис не может подключиться к удаленному Redis в AWS и сервисе выдал следующее исключение:

java.io.IOException: Connection reset by peer

После быстрого поиска в Google большинство ответов предполагало, что проблема связана с SSL-соединением, которое у меня есть, но я был смущен, поскольку RedisURI содержит withSsl вызов функции.

Просто из любопытства я добавил следующее свойство в свой файл application.properties, поскольку я использую конфигурацию Redis на основе свойств в других службах и знал, что это работает.

spring.redis.ssl=true

Теперь это решило мою проблему, но я не понимаю, почему этот подход работает, а версия RedisURI - нет.

Может ли кто-нибудь дать мне объяснение, кто имеет четкое представление о следующей ситуации, пожалуйста?

При необходимости я могу поделиться дополнительными сведениями из журналов. Спасибо!

...