【问题标题】:camel-elasticsearch5 component is not workingcamel-elasticsearch5 组件不工作
【发布时间】:2018-09-28 06:01:36
【问题描述】:

我的项目使用来自 activemq 的消息并使用技术 karaf 4.0.8、Apache camel (2.18.1)、camel-elasticsearch 组件存储到 elasticsearch 2.4 数据库。 我正在尝试升级到 elasticsearch 5 数据库,这需要在客户端进行更改。我发现 apache-camel 2.19.0 中有新的骆驼组件 camel-elasticsearch5。我升级骆驼。之后它看起来没有按预期工作。 1. camel:context-list 等骆驼命令不起作用。 2. 路由不工作,就像消息没有从activemq消费。

另外在日志中有一个警告。

2017-07-18 06:57:27,144 | INFO  | nt Dispatcher: 1 | ElasticsearchProducer            | 21 - org.apache.camel.camel-elasticsearch5 - 2.19.0 | Connecting to the ElasticSearch cluster: elasticsearch
2017-07-18 06:57:27,145 | WARN  | -SNAPSHOT/deploy | BlueprintEventDispatcher         | 83 - org.apache.aries.blueprint.core - 1.7.1 | Listener caused an exception, will be ignored
java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.transport.client.PreBuiltTransportClient
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)[:1.8.0_121]
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)[:1.8.0_121]
        at java.util.concurrent.AbstractExecutorService.doInvokeAny(AbstractExecutorService.java:193)[:1.8.0_121]
        at java.util.concurrent.AbstractExecutorService.invokeAny(AbstractExecutorService.java:225)[:1.8.0_121]
        at org.apache.aries.blueprint.utils.threading.ScheduledExecutorServiceWrapper$4.call(ScheduledExecutorServiceWrapper.java:184)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.utils.threading.ScheduledExecutorServiceWrapper$15.call(ScheduledExecutorServiceWrapper.java:452)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.utils.threading.RWLock.runReadOperation(RWLock.java:35)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.utils.threading.ScheduledExecutorServiceWrapper.runUnlessShutdown(ScheduledExecutorServiceWrapper.java:447)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.utils.threading.ScheduledExecutorServiceWrapper.invokeAny(ScheduledExecutorServiceWrapper.java:178)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintEventDispatcher.callListener(BlueprintEventDispatcher.java:199)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintEventDispatcher.callListeners(BlueprintEventDispatcher.java:189)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintEventDispatcher.blueprintEvent(BlueprintEventDispatcher.java:140)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:424)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:276)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:300)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:269)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:265)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:255)[83:org.apache.aries.blueprint.core:1.7.1]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)[19:org.apache.aries.util:1.1.1]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)[19:org.apache.aries.util:1.1.1]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)[19:org.apache.aries.util:1.1.1]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)[19:org.apache.aries.util:1.1.1]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)[19:org.apache.aries.util:1.1.1]
        at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1179)[org.apache.felix.framework-5.6.1.jar:]
        at org.apache.felix.framework.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:730)[org.apache.felix.framework-5.6.1.jar:]
        at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:485)[org.apache.felix.framework-5.6.1.jar:]
        at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4541)[org.apache.felix.framework-5.6.1.jar:]
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2172)[org.apache.felix.framework-5.6.1.jar:]
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)[org.apache.felix.framework-5.6.1.jar:]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1253)[4:org.apache.felix.fileinstall:3.5.6]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1225)[4:org.apache.felix.fileinstall:3.5.6]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:512)[4:org.apache.felix.fileinstall:3.5.6]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:361)[4:org.apache.felix.fileinstall:3.5.6]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:312)[4:org.apache.felix.fileinstall:3.5.6]
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.transport.client.PreBuiltTransportClient
        at org.apache.camel.component.elasticsearch5.ElasticsearchProducer.doStart(ElasticsearchProducer.java:221)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75)
        at org.apache.camel.impl.DeferServiceStartupListener.onCamelContextStarted(DeferServiceStartupListener.java:49)
        at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3629)
        at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3408)
        at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3262)
        at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:201)
        at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3046)
        at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3042)
        at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3065)
        at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3042)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2980)
        at org.apache.camel.blueprint.BlueprintCamelContext.start(BlueprintCamelContext.java:244)
        at org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:284)
        at org.apache.camel.blueprint.BlueprintCamelContext.blueprintEvent(BlueprintCamelContext.java:177)
        at org.apache.aries.blueprint.container.BlueprintEventDispatcher$4.call(BlueprintEventDispatcher.java:201)
        at org.apache.aries.blueprint.container.BlueprintEventDispatcher$4.call(BlueprintEventDispatcher.java:199)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_121]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_121]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_121]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_121]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_121]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)[:1.8.0_121]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[:1.8.0_121]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_121]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_121]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_121]

知道如何解决这个问题吗?

注意:我已尝试使用 2.20 中可用的功能,但似乎无法正常工作。这就是问题所在。我 那里基本上使用了以下两个捆绑包。

Elasticsearch-Bundle mvnrepository.com/artifact/org.apache.servicemix.bundles/org.apache.servicemix.bundles.elasticsearch/5.4.3_1

Elasticsearch-Client 包 mvnrepository.com/artifact/org.apache.servicemix.bundles/org.apache.servicemix.bundles.elasticsearch-client/5.4.3_1

  1. 要使用 elasticsearch 5,您需要 TransportClient,如 Elasticsearch 捆绑包中的 example 中所述

  2. 要获得TransportClient 作为第一步,您需要使用 Elasticsearch-Client 捆绑包中提供的PreBuiltTransportClient

  3. 现在的问题是预期返回 TransportClient 的 Elasticsearch-Client 没有它,也没有导入它并给出类未找到异常“ 原因:java.lang.ClassNotFoundException: org.apache.servicemix.bundles.elasticsearch-client [127] 找不到 org.elasticsearch.client.transport.TransportClient”

【问题讨论】:

  • 并非所有东西都可以在 OSGi 中运行/运行。你能尝试更深入地挖掘,看看你是否能得到更多的东西,而不仅仅是那个堆栈跟踪?也许检查 elastichseach 的源代码,并打开调试日志等,看看发生了什么。
  • 这似乎是一个众所周知的问题,已经报告但尚未修复。 Camel-Community, Servicemix-Community

标签: apache-camel apache-karaf elasticsearch-5 apache-servicemix


【解决方案1】:

这应该使用来自 Servicemix 和 Apache Camel 2.20.0 的捆绑包版本 5.3.2_1 修复。

在 Camel 2.19.x 分支中,我们为 Karaf 提供了以下功能

https://github.com/apache/camel/blob/camel-2.19.x/platforms/karaf/features/src/main/resources/features.xml#L508-L522

在 2.20.x 分支中,我们也为 Elasticsearch 客户端提供了一个捆绑包:

https://github.com/apache/camel/blob/master/platforms/karaf/features/src/main/resources/features.xml#L566-L580

您可以尝试使用 Camel 2.20.0-SNAPSHOT 版本。

更新:

有一个关于此的 JIRA 问题:https://issues.apache.org/jira/browse/SM-3454,我们将修复它

【讨论】:

  • 我如何尝试 2.20.0-SNAPSHOT,因为它在 maven repo 上尚不可用?
  • 您可以在您的机器上构建源代码或使用以下存储库repository.apache.org/snapshots。此存储库并不总是更新。
  • 我已经更新了关于您使用 2.20.x 的建议的问题。
  • 我会尽快回复您,也许我们可以解决这个问题。
  • 我们打开了一个关于这个issues.apache.org/jira/browse/SM-3454回答编辑的JIRA
猜你喜欢
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多