簡體   English   中英

elasticsearch和java-InvocationTargetException和NoNodeAvailableException

[英]elasticsearch & java - InvocationTargetException and NoNodeAvailableException

我正在嘗試為Elasticsearch索引一個對象,但是除了發現很多死胡同之外,我沒有運氣...

我的應用程序類如下所示:

import com.google.gson.Gson;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;

import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import static org.elasticsearch.common.xcontent.XContentFactory.*;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.elasticsearch.client.transport.TransportClient;

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private FilRepo repository;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9200));

//      repository.deleteAll();
        List<Fil> listFiler = new ArrayList();
        // save a couple of customers
//      repository.save(new Fil("Steffen-1", 5, new Date(), new Date()));
//      repository.save(new Fil("Steffen-2", 10, new Date(), new Date()));

        // fetch all customers
        System.out.println("Filer funder med findAll():");
        System.out.println("-------------------------------");

        for (Fil f : repository.findAll()) {
            listFiler.add(f);
            IndexResponse response = client.prepareIndex("elasticsearch", "fil")
                    .setSource(jsonBuilder()
                            .startObject()
                            .field("fil", f.filNavn)
                            .field("size", f.filStr)
                            .field("created", f.created)
                            .field("modified", f.modified)
                            .endObject()
                    )
                    .get();





                    System.out.println("RESPONSE ER HER: " + response.toString());
        }
        System.out.println(listFiler);
        System.out.println();

        // fetch an individual customer
        System.out.println("Customer found with findByFilNavn('Steffen-1'):");
        System.out.println("--------------------------------");
        System.out.println(repository.findByFilNavn("Steffen-1"));

        client.close();

    }
}

我的Elasticsearch正在運行,已通過轉到localhost:9200進行檢查,它看起來像這樣:

name    "WpUHj5-"
cluster_name    "elasticsearch"
cluster_uuid    "nEgvRKklRveOr1ltZSPbeA"
version 
number  "5.5.0"
build_hash  "260387d"
build_date  "2017-06-30T23:16:05.735Z"
build_snapshot  false
lucene_version  "6.6.0"
tagline "You Know, for Search"

我從mvn spring-boot:run得到的錯誤日志是: 在此處輸入圖片說明

在此處輸入圖片說明

以及我的Elasticsearch窗口上的錯誤:基本上是“外部主機關閉了現有連接”

在此處輸入圖片說明

首先,最好將配置部分與業務邏輯分開。 因此,應遵循用於Elasticsearch的配置bean(請注意, 用於通過TransportClient進行通信正確端口9300 ,端口9200是用於REST的,我認為這是這里的主要問題,但可能不是唯一的問題):

@Configuration
public class ElasticsearchConfig {

    private static final Logger LOG = getLogger(ElasticsearchConfig.class); 

    private Client client;

    @SuppressWarnings("resource")
    @Bean
    public Client getClient() throws UnknownHostException {

        Settings settings = Settings.builder()
                .put("cluster.name", "elasticsearch")
                .build();

        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

        LOG.info("--ElasticSearch--");
        Map<String, String> asMap = client.settings().getAsMap();
        asMap.forEach((k, v) -> LOG.info(k + " = " + v));
        LOG.info("--ElasticSearch--");

        return client;      
    }

    @PreDestroy
    public void closeClient() {
        client.close();
    }

}

初始化client對象后,出於測試目的,您可以檢查您的邏輯(這里打印了客戶端的設置),但是如果您可以將邏輯移至單獨的服務並在注入以下內容后與client一起使用,則將更加干凈:

@Autowired
private Client client;

Spring Boot的主要類:

@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "pl.jma.es.demo.esrepository")
public class EsDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(EsDemoApplication.class, args);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM