2014-04-21 64 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。

什麼,我需要在Apache Camel Elasticsearch Component頁它們顯示出以下例子指定

elasticsearch://clusterName[?options] 

感謝,

+0

不,不起作用。同樣,我需要知道,我在applicatoonContext.xml中指定的那個uri的格式。我需要知道具體的語法。如何劃分indexName和操作?我試過「&」和「;」兩者都沒有工作。這裏是我的確切路線,建議? – user3033910

+0

Hello Web Application,你好嗎? <到URI = 「流:去」/> <到URI = 「elasticsearch://本地操作= INDEX&INDEXNAME =樣品INDEXTYPE =樣品」/> user3033910

回答

1

從快速瀏覽:

elasticsearch://地方? operation = INDEX & indexName = twitter & indexType =鳴叫

這將INDEX(添加)到一個名爲twitter的索引中,其類型爲tweet。你可以使用你想要的任何值作爲indexName和indexType。

更新:望着再次Elasticsearch駱駝組件文檔...我認爲爲了使用local作爲elasticsearch連接的服務器的名稱,您需要與當地的一個羣集名稱來運行本地Elasticsearch實例。默認情況下Elasticsearch配置(elasticsearch.yml)是建立與的elasticsearch

+0

另外,我曾嘗試 no luck要麼.. – user3033910

+0

看起來我需要知道 user3033910

+0

您需要指定'indexName'和'indexType'。嘗試'

0

一個羣集名稱你如果說cluster.name: elasticsearch123使用在elasticsearch.yml指定的羣集名稱,即運行,那麼你必須路線舉例如下:

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) - 這也是必不可少的,否則駱駝的JSON文件轉換爲類Properties(它看起來從GenericFileMap轉換,它會找出後備式轉換器Properties)。當然,您也可以轉換爲組件支持的其他類型。

另外值得一提的是,2.14.1版本的駱駝elasticsearch組件依賴org.elasticsearch:elasticsearch:1.0.0這是給它喜歡Elasticsearch如何快速移動(當前版本是1.4.4)以及多久打破兼容性相當的舊版本。也就是說,該組件似乎與Elasticsearch 1.4.3一起工作。

更新:在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(實際上,類加載器)內啓動的其他(本地)節點將被發現並與之通信。 JVM之外的節點將不會被發現。