2016-10-04 84 views
0

前提条件:如何配置apache骆驼来查看关机的原因?

骆驼2.17

我已经定义了一些路线,这路线包含类似的条目:

.to ("log:org.apache.camel?level=DEBUG") 

我的logback配置包含:

<logger name="org.apache.camel" level="TRACE" /> 

上下文的定义开始:

<camel:camelContext id="someContext" ... trace="true"> 

当我开始骆驼,然后我看到骆驼正在进行,最后没有任何错误报告只是关闭。这看起来像:

2016-10-04 13:40:56,146 [localhost-startStop-1] TRACE org.apache.camel.model.ProcessorDefinitionHelper - There are 6 properties on: From[direct:process] 
2016-10-04 13:40:58,042 [localhost-startStop-1] DEBUG org.apache.camel.spring.SpringCamelContext - onApplicationEvent: org.springframework.context.event.ContextClosedEvent[source=Root WebApplicationContext: startup date [Tue Oct 04 13:37:25 CEST 2016]; root of context hierarchy] 
2016-10-04 13:40:58,066 [localhost-startStop-1] INFO org.apache.camel.spring.SpringCamelContext - Apache Camel 2.17.3 (CamelContext: someContext) is shutting down 

我也一样:

onException(java.lang.Exception.class) 
      .handled(false) 
      .to("log:GeneralError?level=ERROR"); 

但是,这是更相关的交换处理,而不是启动。

是否有任何通用的方法来检查外面发生了什么? 例如:

  • 是否有任何类丢失和类加载器失败?
  • 或者是抛出的任何异常?
  • 或某些连接失败?

完整的路由定义:

final RouteDefinition kafkaRouteDefinition = from("kafka:{{kafka.broker.endpoints}}" + 
     "?topic={{kafka.topic.name}}" + 
     "&groupId=my_group" + 
     "&autoOffsetReset=earliest" + 
     "&consumersCount={{kafka.consumer.count}}"); 

LOG.info("Kafka route definition: " + kafkaRouteDefinition.toString()); 

kafkaRouteDefinition 
     .routeId(Constants.ROUTE_ID_PROCESS_KAFKA_MESSAGES) 
     .to("log:org.apache.camel?level=DEBUG") 
     .process(new RawMessageProcessor()).id(RawMessageProcessor.class.getSimpleName()) 
     .to("log:org.apache.camel?level=DEBUG") 
     .unmarshal(inputMessageFormat).id("ConvertRawMessageToLogline") 
     .to("log:org.apache.camel?level=DEBUG") 
     .process(new LoglineMessageProcessor()).id(LoglineMessageProcessor.class.getSimpleName()) 
     .to("log:org.apache.camel?level=DEBUG") 
     .to(Constants.CAMEL_PROCESS_ENDPOINT) 
     .to("log:org.apache.camel?level=DEBUG") 
     .multicast().stopOnException() 
     .to("log:org.apache.camel?level=DEBUG") 
     .to(Constants.CAMEL_STORE_ENDPOINT 
       , Constants.CAMEL_INDEX_ENDPOINT 
     ) 
     .to("log:org.apache.camel?level=DEBUG") 
     .end(); 

回答

1

我有类似的问题,[但我使用Spring]

这种情况发生时,加载骆驼语境主要方法退出之前满载骆驼背景

在您的测试用例中添加以下代码&它应该运行

org.apache.camel.spring.Main main = new Main(); 
main.setApplicationContextUri("camel-context.xml"); 
main.start(); 
Thread.sleep(1000); 

更多了,您还可以自动启动停止&启动骆驼背景后,每当需要

<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring" autoStartup="false"> 
    <route> 
     <from uri="direct:start"/> 
     <to uri="mock:result"/> 
    </route> 
</camelContext> 

然后在一些Java文件

ApplicationContext ac = ... 
SpringCamelContext camel = (SpringCamelContext) ac.getBean("myCamel"); 

// now start Camel manually 
camel.start(); 
+0

我有更多的少了这一切。问题在于骆驼的冗长。这是吃例外或其他错误报告,甚至没有写入日志。有时在某些TRACE级别的日志中,我看到例如参数为null左右。然后在其他日志行中,我看到“关机”或“停止”或其他 - 通常完全不清楚。我期望至少在WARN级别看到具体的消息,例如“预期的类型/值是String got int,Camel会关闭”。有了这样的报告,我可以看到原因和结果之间的联系。 –

+0

用文件中的调试模式创建log4j.xml。你应该得到每一个步骤 – Ashish

+0

@Aschish:我做到了,它没有太多帮助。我还加入了路由生成器:'onException(java。lang.Exception.class).handled(false).to(“log:GeneralError?level = ERROR”);',但它没有太大帮助。也许我错了,但是我对Kafka Camel插件的代码进行了代码审查,我发现它的异常处理非常少。也许问题发展到更高的水平。 –