提问人:Seweryn Habdank-Wojewódzki 提问时间:10/4/2016 最后编辑:Seweryn Habdank-Wojewódzki 更新时间:10/11/2016 访问量:2206
如何配置apache camel查看关机原因?
How to configure apache camel to see the reason of the shutdown?
问:
前提 条件:
骆驼 2.17
我定义了一些路由,这些路由包含以下条目:
.to ("log:org.apache.camel?level=DEBUG")
我的 logback 配置包含:
<logger name="org.apache.camel" level="TRACE" />
上下文定义开头为:
<camel:camelContext id="someContext" ... trace="true">
当我启动 Camel 时,我看到 Camel 正在进行,最后没有任何错误报告只是关闭。这看起来像:
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赞
Ashish
10/6/2016
#1
我有类似的问题[但我使用的是Spring]
当加载 camel Context 的 main 方法在完全加载 camel context 之前退出时,就会发生这种情况
在测试用例中添加以下代码,它应该运行
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();
评论
1赞
Seweryn Habdank-Wojewódzki
10/7/2016
我拥有的更多更少。问题在于骆驼的冗长。它正在吃异常或其他错误报告,甚至没有将其写入日志。有时在某些 TRACE 级别日志中,我看到例如 paramter 是 null 左右。然后在其他日志行中,我看到“关闭”或“停止”或其他任何内容 - 通常完全不清楚。我希望至少在 WARN 级别看到具体消息,例如“预期类型/值是 String got int。骆驼将关闭”。通过这样的报告,我可以看到原因和结果之间的联系。
0赞
Ashish
10/7/2016
在文件中创建具有调试模式的log4j.xml。您将在那里获得每个步骤
0赞
Seweryn Habdank-Wojewódzki
10/11/2016
@Aschish:我做到了,它没有太大帮助。我还添加了路由构建器:,但它也没有多大帮助。也许我错了,但我对 Kafka Camel 插件的代码进行了代码审查,我发现它几乎没有异常处理。也许问题被送到了更高的层次。onException( java.lang.Exception.class ).handled( false ).to( "log:GeneralError?level=ERROR" );
0赞
Ashish
10/11/2016
请分享您的完整路线。我之前遇到了同样的问题,因为我使用的是 Spring,所以我使用了日志记录不正确,并且它记录了 eveything<bean id="camelTracer" class="org.apache.camel.processor.interceptor.Tracer"> <property name="traceExceptions" value="false"/> <property name="traceInterceptors" value="true"/> <property name="logLevel" value="ERROR"/> <property name="logName" value="com.mycompany.messages"/> </bean>
0赞
Seweryn Habdank-Wojewódzki
10/11/2016
我扩展了问题的内容。
评论