Transport Client(5.x)
您可以通過Transport Client 5.3.3訪問阿里云Elasticsearch 5.x版本的實(shí)例。本文介紹相關(guān)配置說明。
注意事項(xiàng)
建議您使用5.3.3版本的Transport Client來訪問Elasticsearch集群。使用5.5或5.6版本訪問Elasticsearch集群會(huì)提示NoNodeAvailableException的錯(cuò)誤。
由于Transport Client通過TCP與Elasticsearch進(jìn)行通信,因此當(dāng)客戶端與不同版本的Elasticsearch通信時(shí)會(huì)存在兼容性問題,所以官方在高版本集群中已棄用Transport Client。建議優(yōu)先使用Java Low Level REST Client來訪問Elasticsearch集群,以保障版本的兼容性。
準(zhǔn)備工作
安裝Java,要求JDK版本為1.8及以上。
安裝方法請參見安裝JDK。
創(chuàng)建阿里云Elasticsearch實(shí)例,版本為5.5.3。
創(chuàng)建方法請參見創(chuàng)建阿里云Elasticsearch實(shí)例。
開啟阿里云Elasticsearch實(shí)例的自動(dòng)創(chuàng)建索引功能。
具體操作步驟請參見配置YML參數(shù)。
如果未開啟會(huì)提示如下報(bào)錯(cuò)。
配置阿里云Elasticsearch實(shí)例的白名單,確保網(wǎng)絡(luò)互通。
如果運(yùn)行Java代碼的服務(wù)器在公網(wǎng)環(huán)境下,可通過阿里云Elasticsearch實(shí)例的公網(wǎng)地址進(jìn)行連通。連通前,需要開啟阿里云Elasticsearch實(shí)例的公網(wǎng)地址,并修改公網(wǎng)地址訪問白名單,將服務(wù)器的公網(wǎng)IP地址加入白名單中。具體操作步驟請參見配置實(shí)例公網(wǎng)或私網(wǎng)訪問白名單。
重要如果您的客戶端處在家庭網(wǎng)絡(luò)或公司局域網(wǎng)中,您需要將局域網(wǎng)的公網(wǎng)出口IP地址添加到白名單中,而非客戶端機(jī)器的內(nèi)網(wǎng)地址。建議您通過瀏覽器訪問cip.cc獲取您當(dāng)前使用的公網(wǎng)IP地址。
您也可以將白名單配置為0.0.0.0/0,允許所有IPv4地址訪問阿里云Elasticsearch實(shí)例。此配置會(huì)導(dǎo)致實(shí)例完全暴露在公網(wǎng)中,增加安全風(fēng)險(xiǎn),配置前請確認(rèn)您是否可以接受這個(gè)風(fēng)險(xiǎn)。
如果未配置白名單或白名單配置錯(cuò)誤,系統(tǒng)會(huì)提示連接超時(shí)報(bào)錯(cuò)(Timeout connecting)。
如果您需要通過客戶端訪問Kibana節(jié)點(diǎn),還需要配置Kibana的訪問白名單,詳細(xì)信息請參見配置Kibana公網(wǎng)或私網(wǎng)訪問白名單。
如果運(yùn)行Java代碼的服務(wù)器與阿里云Elasticsearch實(shí)例在同一專有網(wǎng)絡(luò)VPC(Virtual Private Cloud)中,可通過阿里云Elasticsearch實(shí)例的私網(wǎng)地址進(jìn)行連通。連通前,需要確保VPC私網(wǎng)訪問白名單(默認(rèn)為0.0.0.0/0)中已添加了服務(wù)器的內(nèi)網(wǎng)IP地址。
創(chuàng)建Java Maven工程,并將下文的pom依賴添加到Java工程的pom.xml文件中。
pom依賴
<repositories>
<!-- add the elasticsearch repo -->
<repository>
<id>elasticsearch-releases</id>
<url>https://artifacts.elastic.co/maven</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
Log4j可能存在遠(yuǎn)程代碼執(zhí)行漏洞,詳細(xì)信息請參見漏洞公告 | Apache Log4j2遠(yuǎn)程代碼執(zhí)行漏洞。
示例
單擊下載完整示例代碼。
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;
import static org.elasticsearch.common.xcontent.XContentFactory.*;
import java.net.InetAddress;
public class TransportClientDemo {
public static void main(String[] args) {
try {
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
.put("cluster.name", "es-cn-n6w1rux8i000w****") //替換為對(duì)應(yīng)阿里云ES實(shí)例的ID。
.put("xpack.security.user", "elastic:es_password") //阿里云ES實(shí)例的用戶名、密碼。
.put("client.transport.sniff", false) //設(shè)置sniff為false。
.build())
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("es-cn-n6w1rux8i000w****.public.elasticsearch.aliyuncs.com"), 9300));//指定域名及端口,替換為對(duì)應(yīng)阿里云ES實(shí)例的域名。
//下面這段代碼可以根據(jù)實(shí)際情況進(jìn)行修改,指定index,type及文檔id。
IndexResponse idxResp3 = client.prepareIndex("test_index", "test_type", "333")
.setSource(jsonBuilder()
.startObject()
.field("user_id", "333")
.field("email", "a***@aliyun.com")
.endObject()
)
.get();
System.out.println(idxResp3.toString());
GetResponse getResp =
client.prepareGet().setIndex("test_index").setType("test_type").setId("333").execute().get();
System.out.println(getResp.getSourceAsString());
client.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
參數(shù) | 描述 |
cluster.name | 阿里云Elasticsearch實(shí)例的ID,可在實(shí)例的基本信息頁面獲取,獲取方法請參見查看實(shí)例的基本信息。 |
client.transport.sniff | 嗅探,請?jiān)O(shè)置為false。 |
xpack.security.user | 訪問阿里云Elasticsearch實(shí)例的用戶名和密碼。用戶名默認(rèn)為elastic。elastic用戶的密碼在創(chuàng)建實(shí)例時(shí)設(shè)定,如果忘記可重置。重置密碼的注意事項(xiàng)和操作步驟,請參見重置實(shí)例訪問密碼。 |
InetAddress.getByName() | 請?jiān)诖朔椒ǖ膮?shù)中指定訪問阿里云Elasticsearch實(shí)例的域名及端口號(hào)。 重要 域名不能加http。 |