当前位置: 首页 > 知识库问答 >
问题:

elasticsearch和camel集成

方兴旺
2023-03-14

我正在尝试将camel与elasticsearch集成。在applicationContext中。xml添加了以下内容

 <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]

谢谢,

共有2个答案

金子轩
2023-03-14

您必须使用elasticsearch中指定的集群名称。yml,即如果它表示群集。名称:elasticsearch123然后您必须按如下方式进行路由:

来自(“文件:data\u json?noop=true

使用本地语言对我来说根本不起作用。不幸的是,它甚至没有抛出任何使调试变得困难的错误。

还要注意转换。convertBodyTo(byte[].class)-这也是很重要的,否则Camel会将JSON文件转换为类属性(它会查找从泛型文件到映射的转换,并找到一个到属性的回退类型转换器)。当然,您也可以转换为组件支持的其他类型。

还值得一提的是,版本2.14.1的camel-elasticsearch组件依赖于org.elasticsearch: elasticsearch: 1.0.0,考虑到Elasticsearch的移动速度(当前版本是1.4.4)以及它喜欢破坏兼容性的频率,这是一个相当旧的版本。也就是说,该组件似乎可以与Elasticsearch1.4.3一起使用。

更新:GitHub上当前的主分支已将Elasticsearch升级到1.4.2版本:https://github.com/apache/camel/blob/2470023e25b8814279cbadb3ebc8002bed6d8fc8/parent/pom.xml#L144

参数/clusterNamelocal实际上意味着它将从Elasticsearch的JavaDoc(NodeBuilder.local(boolean)),查找在同一JVM中启动的Elasticsearch实例:

本地节点是使用本地(JVM级别)发现和传输的节点。将发现并与在同一JVM(实际上是类加载器)中启动的其他(本地)节点进行通信。JVM之外的节点将不会被发现。

金毅
2023-03-14

快速浏览Apache Camel Elasticsearch组件页面,它们显示了以下示例:

elas公司ticsearch://local?operation=INDEX

这将索引(添加)到名为twitter的索引中,类型为tweet。您可以为indexName和indexType使用任何想要的值。

更新:再次查看Elasticsearch Camel Component留档...我认为为了使用local作为elasticsearch连接中的服务器名称,您需要运行本地Elasticsearch实例,并且集群名称为local。默认情况下,Elasticsearch配置elasticsearch.yml)设置为使用elasticsearch的集群名称运行

 类似资料:
  • 我正在从事一个使用Apache Camel和Elasticsearch的项目,我想知道Camel支持哪个版本的Elasticsearch? 我的pom.xml是这样的: 但是当我想将文件路由到elasticsearch时,我遇到了以下错误: Java语言lang.IllegalStateException:收到来自不受支持版本的消息:[2.0.0]最小兼容版本为:[5.0.0] 我发现这个异常是由

  • 我试图让Wildfly和ActiveMQ与Apache Camel一起工作,让我解释一下这个场景。每小时都会有一个camel批处理轮询一个FTP服务器,获取文件并将其发送到ActiveMQ代理。代理实现了两个路由:和。消息被排入,如果它们还没有准备好发送,则被路由到。中的消息由camel处理器出列和翻译,并在准备发送时排队到。中的准备发送消息被发送到Wildfly,MDB在那里执行某些操作。除了最

  • 我是骆驼的新手,并且面临着需要设置的路线问题。如果有人可以引导我到正确的论坛,或者更好地纠正我面临的问题,那就太好了。这是我需要做的 - 公开一个 restlet endpoint来接受数据;使用此数据作为外部 SOAP Web 服务的输入,并以 JSON 格式将响应发送回调用方...这是我所做的...但是,当Camel尝试调用Web服务时,我收到以下错误...谁能指导我到这里?谢谢。 我使用的是

  • EdIndexBolt,EsPercolateBolt和Estate允许用户将storm中的数据直接传输到Elasticsearch。 详细说明请参考以下内容。 EsIndexBolt (org.apache.storm.elasticsearch.bolt.EsIndexBolt) EsIndexBolt将tuples直接流入Elasticsearch索。 Tuples以指定的索引和类型组合进行

  • 我构建了Elasticsearch查询(DSL),如下所示。我想从Java应用程序中集成它。当我阅读时,高水平和低水平的Rest选项由Elastic提供。是否可以使用高级API构建复杂的查询?或者我将使用低级API,通过程序构建DSL?

  • 我有一些用akka写的演员,我想通过ServiceMix让他们互动。很难,我对这些技术是如何交互的有点困惑。这是我目前所理解的: < li>akka让我写一些演员: < ul > < li >生产者发送消息 < li >消费者接收消息 < li >发送和接收的非类型化编辑器 每个参与者将在一个固定的endpoint上可用,在ServiceMix中定义为route 现在我的问题是: 谁自动在jett