Spring 本机 RestHighLevelClient 未连接到 AWS OpenSearch
Spring Native with RestHighLevelClient not connecting to AWS OpenSearch
我在“Amazon Linux 2”上配置了 Lambda 和 运行。 GraalVM 是我们应用程序使用的运行时。
当 Lambda 尝试与 OpenSearch 建立连接时,总是会导致 "java.net.SocketTimeoutException:连接 http-outgoing-0 [ACTIVE]" 时超时 60,000 毫秒 .
以下是我们应用中使用的一些要点:
- Lambda 和 OpenSearch 都在同一个 VPC 中
- 安全组配置为允许所有入站和出站流量(目前)
- 我们使用 Elasticsearch 的 'RestHighLevelClient' 库与 OpenSearch 建立连接
- Lambda 的权限具有完整的 OpenSearch 访问权限。
下面是RestHighLevelClient配置:
public class OpenSearchConfig extends AbstractElasticsearchConfiguration {
@Value("${aws.es.endpoint:defaultEndpoint}")
private String endpoint;
@Override
public RestHighLevelClient elasticsearchClient() {
return new RestHighLevelClient(RestClient.builder(HttpHost.create(endpoint)));
}
}
注意:当我们使用 'Java 11 (Corretto)' 作为运行时时,Lambda 到 OpenSearch 的连接工作正常。由于我们在 Lambda 中面临冷启动问题,我们计划使用 GraalVM(由 Spring Native 支持)来加快启动速度,但最终遇到了这个障碍。将套接字连接超时增加到任何限制也无济于事。
非常感谢任何建议。提前致谢。
看来 Spring 的魔法与 GraalVM 不太兼容。我修改了如下配置,效果很好。
@Configuration
public class OpenSearchConfig {
@Value("${aws.es.endpoint:defaultEndpoint}")
private String endpoint;
@Bean
public RestHighLevelClient elasticsearchClient() {
return new RestHighLevelClient(RestClient.builder(HttpHost.create(endpoint)));
}
}
上面我已经明确地将 RestHighLevelClient 标记为一个 bean,并创建了 ElasticsearchOperations 实例,如下所示:
private RestHighLevelClient restHighLevelClient;
private ElasticsearchOperations elasticsearchOperations;
@Autowired
public Foo(RestHighLevelClient restHighLevelClient){
this.restHighLevelClient = restHighLevelClient;
this.elasticsearchOperations = new ElasticsearchRestTemplate(this.restHighLevelClient);
}
希望这对某人有所帮助。
我在“Amazon Linux 2”上配置了 Lambda 和 运行。 GraalVM 是我们应用程序使用的运行时。
当 Lambda 尝试与 OpenSearch 建立连接时,总是会导致 "java.net.SocketTimeoutException:连接 http-outgoing-0 [ACTIVE]" 时超时 60,000 毫秒 .
以下是我们应用中使用的一些要点:
- Lambda 和 OpenSearch 都在同一个 VPC 中
- 安全组配置为允许所有入站和出站流量(目前)
- 我们使用 Elasticsearch 的 'RestHighLevelClient' 库与 OpenSearch 建立连接
- Lambda 的权限具有完整的 OpenSearch 访问权限。
下面是RestHighLevelClient配置:
public class OpenSearchConfig extends AbstractElasticsearchConfiguration {
@Value("${aws.es.endpoint:defaultEndpoint}")
private String endpoint;
@Override
public RestHighLevelClient elasticsearchClient() {
return new RestHighLevelClient(RestClient.builder(HttpHost.create(endpoint)));
}
}
注意:当我们使用 'Java 11 (Corretto)' 作为运行时时,Lambda 到 OpenSearch 的连接工作正常。由于我们在 Lambda 中面临冷启动问题,我们计划使用 GraalVM(由 Spring Native 支持)来加快启动速度,但最终遇到了这个障碍。将套接字连接超时增加到任何限制也无济于事。
非常感谢任何建议。提前致谢。
看来 Spring 的魔法与 GraalVM 不太兼容。我修改了如下配置,效果很好。
@Configuration
public class OpenSearchConfig {
@Value("${aws.es.endpoint:defaultEndpoint}")
private String endpoint;
@Bean
public RestHighLevelClient elasticsearchClient() {
return new RestHighLevelClient(RestClient.builder(HttpHost.create(endpoint)));
}
}
上面我已经明确地将 RestHighLevelClient 标记为一个 bean,并创建了 ElasticsearchOperations 实例,如下所示:
private RestHighLevelClient restHighLevelClient;
private ElasticsearchOperations elasticsearchOperations;
@Autowired
public Foo(RestHighLevelClient restHighLevelClient){
this.restHighLevelClient = restHighLevelClient;
this.elasticsearchOperations = new ElasticsearchRestTemplate(this.restHighLevelClient);
}
希望这对某人有所帮助。