2014-04-21 3 views
0

Я пытаюсь интегрировать верблюда с elasticsearch. В applicationContext.xml добавили следующуюelasticsearch и интеграция верблюда

<route id="timer-to-console"> 
     <from uri="timer://foo?fixedRate=true&amp;period=10s"/> 
     <transform> 
      <simple>Hello Web Application, how are you?</simple> 
     </transform> 
     <to uri="stream:out"/> 
     <to uri="elasticsearch://local"/> 
    </route> 

Затем, когда я бегу

mvn jetty:run 

Я получаю следующее

veryCounter=0, firedTime=Mon Apr 21 13:14:43 PDT 2014} 
BodyType   String 
Body    Hello Web Application, how are you? 
] 

Stacktrace 
    ----------------------------------------------------------------------------------------  
java.lang.IllegalArgumentException: operation is missing 
at org.apache.camel.component.elasticsearch.ElasticsearchProducer.process(ElasticsearchProducer.java:54) 
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) 

Мой elasticsearch работает локально, я использую ES 1.1. 1.

что мне нужно указать для

elasticsearch://clusterName[?options] 

Спасибо,

+0

Нет, это не работает. Опять же, мне нужно знать формат этого uri, который я указал в applicationatoonContext.xml. Мне нужно знать конкретный синтаксис. Как разграничить indexName и операцию? Я попробовал «&» и «;» оба не работали. Вот точная строка, которую я имею, предложения? – user3033910

+0

Привет, веб-приложение, как дела? <Ури = "поток: из" /> <Ури = "elasticsearch: // локальная операция = INDEX & IndexName = образца и indexType = образец" /> user3033910

ответ

1

От беглого взгляда на Apache Camel Elasticsearch Component страницы они показывают следующий пример:

elasticsearch: // локальный? operation = INDEX & indexName = twitter & indexType = tweet

Это ИНДЕКС (добавить) в индекс с именем twitter с типом tweet. Вы можете использовать любые значения, которые вы хотите для indexName и indexType.

Update: Глядя на документацию Elasticsearch Camel компонентов снова ... Я думаю, что для того, чтобы использовать local в качестве имени сервера в связи elasticsearch, вам нужно будет работать ваш локальный экземпляр Elasticsearch с CLUSTERNAME местного , По умолчанию конфигурации Elasticsearch (elasticsearch.yml) настроен для работы с CLUSTERNAME из elasticsearch

+0

Кроме того, я попытался 0 to uri = "elasticsearch: // local? Operation = INDEX & indexName = sample" /> не повезло. – user3033910

+0

Похоже, мне нужно знать точный синтаксис для user3033910

+0

Вам нужно указать как' indexName', так и 'indexType'. Попробуйте '

0

Вы должны использовать имя кластера, указанного в elasticsearch.yml, то есть, если он говорит cluster.name: elasticsearch123, то вы должны маршрут, например, следующим образом:

from("file:data_json?noop=true&moveFailed=data_json/.error") .convertBodyTo(byte[].class) .to("elasticsearch://elasticsearch123?operation=INDEX&indexName=myindexname&indexType=mytypename");

Использование local просто не работает для меня. К сожалению, он даже не вызывает ошибок, что затрудняет отладку.

заметить также преобразование .convertBodyTo(byte[].class) - это также имеет важное значение, в противном случае Camel преобразует файлы в формате JSON в класс Properties (это выглядит для преобразования из GenericFile в Map и он находит преобразователь типа запасного варианта для Properties). Конечно, вы также можете преобразовать другие типы, поддерживаемые компонентом.

Стоит также отметить, что верблюд-elasticsearch компонент версии 2.14.1 зависит от org.elasticsearch:elasticsearch:1.0.0, которая является довольно старая версия, учитывая, как быстро движется Elasticsearch (текущая версия 1.4.4) и как часто он любит нарушать совместимость. Тем не менее, компонент, похоже, работает с Elasticsearch 1.4.3.

Update: текущий мастер ветвь на GitHub имеет Elasticsearch обновлена ​​до версии 1.4.2: https://github.com/apache/camel/blob/2470023e25b8814279cbadb3ebc8002bed6d8fc8/parent/pom.xml#L144

Параметр/ClusterName local на самом деле означает, что он будет искать экземпляр Elasticsearch начало в том же JVM, от Elasticsearch-х JavaDoc (NodeBuilder.local(boolean)):

локальный узел является узлом, который использует локальный (уровень JVM) обнаружение и транспорта. Другие (локальные) узлы, запущенные в пределах одной JVM (фактически, class-loader), будут обнаружены и обмениваются . Узлы вне JVM не будут обнаружены.

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