2016-10-04 83 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插件的代碼進行了代碼審查,我發現它的異常處理非常少。也許問題發展到更高的水平。 –