- 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 - нет.
Может ли кто-нибудь дать мне объяснение, кто имеет четкое представление о следующей ситуации, пожалуйста?
При необходимости я могу поделиться дополнительными сведениями из журналов. Спасибо!