我正在做一个涉及模糊搜索的新项目,所以我也在用spring boot(v2.1.5)做elasticsearch(v6.4.3)。我无法在spring boot与elasticsearch之间建立连接,因为我必须将用户名、密码、ca_certificate_base64从spring boot传递到elasticsearch才能建立连接。你能让我知道我如何建立连接和什么elasticsearch客户端是正确的选项吗?一个示例或链接会很有帮助。
在本地(我的笔记本电脑),我确实安装了ElasticSearch6和spring Boot2.1.5。我能够建立连接(使用spring数据),因为不需要'https'连接,或者传递用户名和密码,因为internet中的大多数示例都是关于localhost:9200的。
public Client client() {
Settings elasticsearchSettings = Settings.builder()
.put("client.transport.sniff", true)
.put("uri", "https://usertemp:ABCSAD@alp-usba-north-3-portal.11.db2lay.com:32117/")
.put("uri_direct_1", "https://usertemp:ABCSAD@alp-usba-north-3-portal.11.db2lay.com:32117/")
.put("cluster.name", clusterName).build();
TransportClient client = new PreBuiltTransportClient(elasticsearchSettings);
}
I also tried to update application.properties file
'''
spring.data.elasticsearch.cluster-name=ee842f-93042
spring.data.elasticsearch.cluster-nodes=alp-usba-north-3-portal.11.db2lay.com:32117
spring.data.elasticsearch.properties.username=usertemp
spring.data.elasticsearch.properties.password=ABCSAD
spring.data.elasticsearch.properties.ca_certificate_base64=SUZJQ0FURS0tLS0tCk1JSURvekNDQW91Z0F3SUJBZ0lFWFA5Sjl6QU5CZ2
我期待与Spring靴和弹性搜索的联系。但是,当我启动应用程序服务器时,得到以下错误。
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.transport.TransportClient]: Factory method 'elasticsearchClient' threw exception; nested exception is java.lang.IllegalArgumentException: unknown setting [password] please check that any required plugins are installed, or check the breaking changes documentation for removed settings at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE] ... 96 common frames omitted Caused by: java.lang.IllegalArgumentException: unknown setting [password] please check that any required plugins are installed, or check the breaking changes documentation for removed settings at org.elasticsearch.common.settings.AbstractScopedSettings.validate(AbstractScopedSettings.java:393) ~[elasticsearch-6.4.3.jar:6.4.3]
正如我在评论中已经提到的,我不知道IBM Compose for Elasticsearch到底是如何设置连接安全性的;此方案的设置如下:
为了能够通过HTTPS通信,您需要使用RestClient
,它在Spring Data Elasticsearch 3.2版(目前在3.2.0.m4版中可用)中提供。Spring Boot 2.1.5拉入Spring Data Elasticsearch 3.1.8,因此您需要覆盖该版本。您还需要指定Elasticsearch版本以匹配Spring Boot数据3.2.0.m4,因此您的pom.xml需要以下条目:
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>6.7.2</elasticsearch.version>
<spring-data-elasticsearch>3.2.0.M4</spring-data-elasticsearch>
</properties>
<repositories>
<repository>
<id>spring-libs-snapshot</id>
<name>Spring Snapshot Repository</name>
<url>https://repo.spring.io/libs-milestones</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>${spring-data-elasticsearch}</version>
</dependency>
</dependencies>
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
private static final Logger LOG = LoggerFactory.getLogger(RestClientConfig.class);
private static final String CERT_FILE = "client.p12";
private static final String CERT_PASSWORD = "topsecret";
private static final String USER_NAME = "user";
private static final String USER_PASS = "password";
@Override
public RestHighLevelClient elasticsearchClient() {
final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo("localhost:443") // set the address of the Elasticsearch cluster
.usingSsl(createSSLContext()) // use the SSLContext with the client cert
.withBasicAuth(USER_NAME, USER_PASS) // use the headers for authentication
.build();
return RestClients.create(clientConfiguration).rest();
}
private SSLContext createSSLContext() {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
KeyManager[] keyManagers = getKeyManagers();
sslContext.init(keyManagers, null, null);
return sslContext;
} catch (Exception e) {
LOG.error("cannot create SSLContext", e);
}
return null;
}
private KeyManager[] getKeyManagers()
throws KeyStoreException, NoSuchAlgorithmException, IOException, CertificateException, UnrecoverableKeyException {
try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream(CERT_FILE)) {
KeyStore clientKeyStore = KeyStore.getInstance("PKCS12");
clientKeyStore.load(inputStream, CERT_PASSWORD.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(clientKeyStore, CERT_PASSWORD.toCharArray());
return kmf.getKeyManagers();
}
}
@Bean
@Primary
public ElasticsearchOperations elasticsearchTemplate() {
return elasticsearchOperations();
}
}
您可能需要调整getKeyManager()
方法中的代码以匹配Compose中的代码,但这应该为您提供了一个起点。
我的EKS集群变得不健康,因为所有豆荚都有“容器创建”错误,这可能与CNI问题有关。 在版本1.5.5中,conflist文件的位置更改为/etc/cni/10-aws.conflist,但节点仍然处于“notready”状态。 我的EKS版本是1.14,平台版本是EKS.2。 Ipamd日志: 有人对这个问题有什么线索吗?
我使用他们的web UI在EMR上创建了一个AWS Spark2.2集群(这里是新手)。我知道我需要连接到主节点,以便开始发出pyspark命令来学习Spark。但是,当我尝试连接到主节点时,它给我一个错误。在浏览了internet之后,我发现使用可能有助于调试正在进行的操作,但我找不到任何有用的信息。下面是我的ssh调试日志。 有人能指出这里的问题是什么吗?编辑:我已经尝试过将端口22添加到安全
由于单个redis实例不符合我的要求,我选择了redis cluster。我用三个节点组成集群,并将数据填充到集群中。当我使用JedisCluster从集群获取数据时,它比单个实例花费更多的时间。那么,将绝地与redis星系团连接起来的正确方式是什么呢。我如何利用连接池将绝地与redis集群连接起来?
我是AWS云前线和AWS的新手。我有一个Next.js(反应SSR框架)网站,我部署到AWS使用(https://github.com/serverless-nextjs/serverless-next.js)。然而,我也需要一些缓存的Web应用程序。我决定使用来自AWS的redis ElastiCache。我在AWS控制台上创建了一个redis弹性缓存集群。 我的尝试: 我设置了连接redis
我正在制作托管在heroku上的NodeJS应用程序并使用MongoDB地图集作为后端。当我通过POSTMAN向应用程序发送POST请求时,它显示: 在我看来,节点应用程序无法连接到MongoDB地图集集群。如果是这样,那么我如何将其与MongoDB连接。 谢谢
我不知道如何通过N连接到AWS的ElastiCache Redisode.js.我已经成功地通过node_redisNPM连接到主主机(001),但是我无法使用ioredis的集群能力,因为显然ElastiCache没有实现CLUSTER命令。 我认为必须有另一种方法,但用于节点的AWS SDK只有用于管理ElastiCache的命令,而不是用于实际连接到ElastiCache的命令。 如果不使用