2014-11-12 2 views
3

Я пытаюсь использовать API-интерфейс ElasticSearch в приложении Dropwizard.Использование ElasticSearch с Dropwizard

Я нашел пакет dropwizard-elasticsearch: https://github.com/dropwizard/dropwizard-elasticsearch, который, кажется, именно то, что мне нужно. К сожалению, он предоставляет нулевую «полезную» документацию и примеры использования.

Я до сих пор не понял, как подключиться к удаленным серверам с помощью TransportClient, потому что из-за отсутствия документации по конфигурации drop wizard-elasticsearch я должен попробовать «случайно», пока не найду правильные ключи конфигурации ...

Кто-нибудь пробовал использовать dropwizard-elasticsearch? Или у кого-то есть реальный пример использования этого?

Заранее спасибо,

ответ

1

Слишком долго для комментария.

Пожалуйста, проверьте README.md -> «Использование» и «Конфигурация». Если вы хотите, чтобы dropwizard создавал управляемый TransportClient, ваши настройки конфигурации должны быть something like this. nodeClient: false clusterName: dropwizard_elasticsearch_test servers: - 127.23.42.1:9300 - 127.23.42.2:9300 - 127.23.42.3

Как получить управляемый dropwizard TransportClient? Пример: public void transportClientShouldBeCreatedFromConfig().

@Override public void run(DemoConfiguration config, Environment environment) { final ManagedEsClient managedClient = new ManagedEsClient(configuration.getEsConfiguration()); Client client = managedClient.getClient(); ((TransportClient) client).transportAddresses().size(); // [...] }

Существует также sample blog application с помощью Dropwizard и ElasticSearch. См. Раздел «Благодарности» в README.md.

1

Если вам действительно не нужно присоединиться к кластеру Elasticsearch, я бы избегал использовать классы Java, предоставляемые Elasticsearch. Если вы подключитесь к Elasticsearch таким образом, вам нужно будет синхронизировать версии JVM, используемые Elasticsearch и вашим приложением.

Вместо этого вы можете подключиться к Elasticsearch, используя клиент Jest, найденный на GitHub. Это позволит вам подключиться к Elasticsearch через интерфейс REST, как и все другие клиентские библиотеки.

Вам нужно будет создать простой блок конфигурации для Elasticsearch, чтобы указать URL-адрес интерфейса REST. Кроме того, вам нужно будет создать диспетчер для запуска и остановки JestClient.

Обновление: Вы можете найти комплект Dropwizard, который я использую для подключения к Elasticsearch по адресу GitHub. Ниже приведены некоторые основные инструкции по использованию Java 8:

Включите зависимость для пакета в POM вашего проекта.

<dependency> 
    <groupId>com.meltmedia.dropwizard</groupId> 
    <artifactId>dropwizard-jest</artifactId> 
    <version>0.1.0</version> 
</dependency> 

Определите класс JestConfiguraion где-то в конфигурации вашего приложения.

import com.meltmedia.dropwizard.jest.JestConfiguration; 

... 

@JsonProperty 
protected JestConfiguration elasticsearch; 

public JestConfiguration getElasticsearch() { 
    return jest; 
} 

Затем включите сверток в initialize методе приложения.

import com.meltmedia.dropwizard.jest.JestBundle; 

... 
protected JestBundle jestBundle; 

@Override 
public void initialize(Bootstrap<ExampleConfiguration> bootstrap) { 
    bootstrap.addBundle(jestBundle = JestBundle.<ExampleConfiguration>builder() 
    .withConfiguration(ExampleConfiguration::getElasticsearch) 
    .build()); 
} 

Наконец, используйте комплект для доступа к поставщику клиента.

@Override 
public void run(ExampleConfiguration config, Environment env) throws Exception { 
    JestClient client = jestBundle.getClientSupplier().get(); 
} 
0

Я использовал Java API для elasticsearch и то расслоение вы используете я исследовал, но документация часть обескуражен его использования. Здесь вы можете использовать эластичный материал без этого пучка: -

  1. Определите свои эластичные конфиги в вашем .yml-файле.

    elasticsearchHost: 127.0.0.1 
    elasticPort: 9300 
    clusterName: elasticsearch 
    
  2. Теперь в файле конфигурации (в моем случае это mkApiConfiguration) создать статические функции, которые будут фактически методы получения для этих упругих конфигурации: -

    @NotNull 
    private static String elasticsearchHost; 
    
    @NotNull 
    private static Integer elasticPort; 
    
    @NotNull 
    private static String clusterName; 
    
    @JsonProperty 
    public static String getElasticsearchHost() { 
        return elasticsearchHost; 
    } 
    //This function will be called while reading configurations from yml file 
    @JsonProperty 
    public void setElasticsearchHost(String elasticsearchHost) { 
        mkApiConfiguration.elasticsearchHost = elasticsearchHost; 
    } 
    
    @JsonProperty 
    public void setClusterName(String clusterName) { 
        mkApiConfiguration.clusterName = clusterName; 
    } 
    
    public void setElasticPort(Integer elasticPort) { 
        mkApiConfiguration.elasticPort = elasticPort; 
    } 
    
    @JsonProperty 
    public static String getClusterName() { 
        return clusterName; 
    } 
    
    @JsonProperty 
    public static Integer getElasticPort() { 
        return elasticPort; 
    } 
    
  3. Теперь создать эластичный фабрика, откуда вы можете получить транспортный клиент, лучше создать его как один из одноэлементного класса, так что только один экземпляр создается и используется для гибкой конфигурации, мы можем получить конфигурацию с использованием метода getter configurati на классе, поскольку они являются статическими методами, поэтому нам не нужно создавать объект для доступа к этим методам. Так код этого завода идет как этот

    public class ElasticFactory { 
    
    //Private constructor 
    private ElasticFactory(){}; 
    public static Client getElasticClient(){ 
        try {  
         /* 
         * Creating Transport client Instance 
         */ 
         Client client = TransportClient.builder().build() 
          .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(mkApiConfiguration.getElasticsearchHost()), mkApiConfiguration.getElasticPort())); 
        return client; 
    } 
    catch (Exception e){ 
        e.printStackTrace(); 
        return null; 
    } 
    

    }

  4. Теперь вы можете вызвать этот упругий фабричный метод из любого класса, как показано ниже: -

    /*As getInstance is a static method so we can access it directly without creating an object of ElasticFactory class */ Client elasticInstance= ElasticFactory.getElasticClient();

Смежные вопросы