Açık kaynaklı Elasticsearch'te Transport Client kullanımdan kaldırılmıştır. Yeni projeler için tüm Elasticsearch sürümlerinde sürüm uyumluluğu sağlayan Java Low Level REST Client istemcisini kullanın.
Bu konu, TCP üzerinden bir Alibaba Cloud Elasticsearch V5.x kümesine bağlanmak için Transport Client 5.3.3'ün nasıl kullanılacağını açıklar.
Önkoşullar
Başlamadan önce aşağıdaki koşulları sağladığınızdan emin olun:
JDK 1.8 veya üzeri bir sürüm yüklenmiş olmalıdır. Bkz. JDK Yükleme
Bir Alibaba Cloud Elasticsearch V5.5.3 kümeniz bulunmalıdır. Bkz. Alibaba Cloud Elasticsearch Kümesi Oluşturma
Küme için Otomatik Dizin Oluşturma (Auto Indexing) özelliği etkinleştirilmiş olmalıdır. Bkz. YML Dosyasını Yapılandırma
Otomatik Dizin Oluşturma etkinleştirilmezse bir belge dizine eklenirken hata oluşur. 
Ağ erişimini yapılandırma
Java istemcinizin çalıştığı konuma göre bağlantı yöntemini seçin.
İnternet (genel uç nokta)
Java istemciniz bir sanal özel bulut (VPC) dışındaysa:
Kümeniz için Genel Ağ Erişimini etkinleştirin.
İstemcinizin genel IP adresini kümenin genel IP adresi izin listesine ekleyin. Bkz. Elasticsearch Kümesi İçin Genel veya Özel IP Adresi İzin Listesi Yapılandırma.
İstemciniz bir ev ağındaysa veya ofis LAN'ındaysa istemcinin özel IP adresi yerine İnternet çıkış IP adresini izin listesine ekleyin.
İzin listesine
0.0.0.0/0eklemek tüm IPv4 adreslerinin kümeye erişmesine olanak tanır. Bu ayarı kullanmadan önce güvenlik risklerini değerlendirin.İzin listesi eksik veya hatalıysa bağlantı
Timeout connectinghatasıyla başarısız olur.Bir istemciden Kibana düğümüne erişmek için ayrı bir Kibana izin listesi yapılandırın. Bkz. Kibana İçin Genel veya Özel IP Adresi İzin Listesi Yapılandırma.
Aynı VPC (dahili uç nokta)
Java istemciniz Elasticsearch kümesiyle aynı VPC'de çalışıyorsa kümenin dahili uç noktasını kullanın. Özel IP izin listesi varsayılan olarak 0.0.0.0/0 şeklindedir.
POM bağımlılıklarını ekleme
Aşağıdaki bağımlılıkları pom.xml dosyanıza ekleyin:
<repositories>
<!-- Elasticsearch Maven repository -->
<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>
Apache Log4j'de uzaktan kod yürütme (RCE) güvenlik açığı bulunabilir. Ayrıntılar ve azaltma adımları için bkz. Güvenlik Açığı Bildirimi | Apache Log4j 2'deki RCE Güvenlik Açığı.
Kümeyle bağlantı kurma
Aşağıdaki kod bir Transport Client bağlantısının nasıl başlatılacağını gösterir. Yer tutucuları gerçek küme değerlerinizle değiştirin.
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 java.net.InetAddress;
// Initialize the Transport Client
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
.put("cluster.name", "<cluster-id>") // Your cluster ID
.put("xpack.security.user", "elastic:<password>") // Username and password
.put("client.transport.sniff", false) // Must be false
.build())
.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName("<endpoint>"), 9300)); // Endpoint (no http://) and port
// Close the client when done
client.close();
| Parametre | Açıklama |
|---|---|
cluster.name |
Elasticsearch kümenizin kimliği. Bu değeri Basic Information sayfasından alın. Bkz. Kümenin Temel Bilgilerini Görüntüleme. |
xpack.security.user |
kullanıcı_adı:parola biçimindeki kullanıcı adı ve parola. Varsayılan kullanıcı adı elastic şeklindedir. Parolayı sıfırlamak için bkz. Elasticsearch Kümesinin Erişim Parolasını Sıfırlama. |
client.transport.sniff |
false olarak ayarlayın. |
InetAddress.getByName() |
Küme uç noktası ve 9300 bağlantı noktası. Uç nokta http:// ile başlamamalıdır. |
Aşağıdaki yer tutucuları değiştirin:
| Yer Tutucu | Açıklama | Örnek |
|---|---|---|
<cluster-id> |
Elasticsearch küme kimliğiniz | es-cn-n6w1rux8i000w**** |
<password> |
elastic kullanıcısının parolası |
— |
<endpoint> |
Kümenin genel veya dahili uç noktası | es-cn-n6w1rux8i000w****.public.elasticsearch.aliyuncs.com |
Örnek
Aşağıdaki örnek kümeye bağlanır, bir dizine bir belge yazar ve bu belgeyi alır. Tam örnek kodu indirin.
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 {
// Initialize the client
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
.put("cluster.name", "es-cn-n6w1rux8i000w****")
.put("xpack.security.user", "elastic:es_password")
.put("client.transport.sniff", false)
.build())
.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName("es-cn-n6w1rux8i000w****.public.elasticsearch.aliyuncs.com"), 9300));
// Write a document to the index
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());
// Retrieve the document
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);
}
}
}
Sorun giderme
NoNodeAvailableException
Bu hata bir Elasticsearch V5.x kümesine bağlanmak için Transport Client 5.5 veya 5.6 kullandığınızda oluşur. Bunun yerine Transport Client 5.3.3 kullanın.
Timeout connecting
Kümeye ulaşılamıyor. Şunları kontrol edin:
İstemcinizin IP adresi ağ yapınıza bağlı olarak kümenin genel veya özel izin listesinde bulunmalıdır.
Ağ ortamınız için doğru uç noktayı (genel veya dahili) kullanıyor olmalısınız.
Ev veya ofis LAN istemcileri için izin listesi girdisi özel IP yerine İnternet çıkış IP'sini kullanmalıdır.
Belge yazma sırasında Otomatik Dizin Oluşturma hatası
Bir belge yazılırken hata oluşuyorsa Otomatik Dizin Oluşturma devre dışı bırakılmış olabilir. Bu özelliği kümenin YML yapılandırmasında etkinleştirin. Bkz. YML Dosyasını Yapılandırma.
Sonraki adımlar
Java Low Level REST Client — tam sürüm uyumluluğu sunan, yeni projeler için önerilen istemci