Apache camel Camel onCompletion with ModeBefore Consumer->;堆栈溢出错误
我创建了一条如下所示的路线:Apache camel Camel onCompletion with ModeBefore Consumer->;堆栈溢出错误,apache-camel,Apache Camel,我创建了一条如下所示的路线: from("cxfrs:bean:server?bindingStyle=SimpleConsumer") .setExchangePattern(ExchangePattern.InOnly) .streamCaching() .onCompletion() .modeBeforeConsumer() // <-- Problem .to(CommonRoutes.ENDPOINT_DIRECT_LOG
from("cxfrs:bean:server?bindingStyle=SimpleConsumer")
.setExchangePattern(ExchangePattern.InOnly)
.streamCaching()
.onCompletion()
.modeBeforeConsumer() // <-- Problem
.to(CommonRoutes.ENDPOINT_DIRECT_LOGGING)
.process(createResponse)
.end()
.split().body().stopOnException()
.process(domainWrapProcessor)
.to(OutAmq.OUT_PLUG)
;
因为我只想将状态为空的正文发送回调用方,所以我添加了.process(createResponse)
和.modebeforecumer()
。对于日志记录,这与是否在使用者之前或之后发生无关。
问题在于添加.modebeforecummer()
camel会产生StackOverflower错误。
onCompletion会被触发数百次,但交换总是在之后反馈到(CommonRoutes.ENDPOINT\u DIRECT\u LOGGING)
-createResponse
。但是,mock:ENDPOINT\u VM\u LOG\u交付
注册了大约一百个交换。
我发现了两种变通方法(但都破坏了所需的语义):
- “模拟和跳过”端点\u直接\u日志记录(不调用日志路由)
- 删除/注释
.modebeforecumer()
from(ENDPOINT_DIRECT_LOGGING)
.routeId(routeId_direct_logging)
.doTry()
.process(createAuditMessageProcessor)
.marshal().json(JsonLibrary.Jackson)
.to(ENDPOINT_VM_LOG_DELIVERY) //mocked out in Test
.doCatch(Throwable.class)
.process(e -> {
log.warn("Failed to send audit message", e);
})
.end()
.end();
[immobilenserviceIn] [to3 ] [direct:logging ] [ 769]
[routeId_directLogg] [doTry1 ] [doTry ] [ 12]
[routeId_directLogg] [process1 ] [Processor@0x11f0a5a1 ] [ 0]
[routeId_directLogg] [marshal1 ] [marshal[org.apache.camel.model.dataformat.JsonDataFormat@20435c40] ] [ 12]
[routeId_directLogg] [to1 ] [vm:log-delivery ] [ 0]
[immobilenserviceIn] [process3 ] [Processor@0x142269f2 ] [ 0]
[immobilenserviceIn] [to3 ] [direct:logging ] [ 757]
[routeId_directLogg] [doTry1 ] [doTry ] [ 12]
org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[ID-D624342-61550-1491998476554-0-2]
at org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1706)
at org.apache.camel.impl.DefaultExchange.setException(DefaultExchange.java:348)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:160)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:91)
at org.apache.camel.processor.OnCompletionProcessor.doProcess(OnCompletionProcessor.java:151)
at org.apache.camel.processor.OnCompletionProcessor$OnCompletionSynchronizationBeforeConsumer.onAfterRoute(OnCompletionProcessor.java:350)
at org.apache.camel.util.UnitOfWorkHelper.afterRouteSynchronizations(UnitOfWorkHelper.java:154)
at org.apache.camel.impl.DefaultUnitOfWork.afterRoute(DefaultUnitOfWork.java:273)
at org.apache.camel.processor.CamelInternalProcessor$RouteLifecycleAdvice.after(CamelInternalProcessor.java:316)
at org.apache.camel.processor.CamelInternalProcessor$InternalCallback.done(CamelInternalProcessor.java:245)
at org.apache.camel.processor.CamelInternalProcessor$InternalCallback.done(CamelInternalProcessor.java:256)
at org.apache.camel.management.InstrumentationProcessor$1.done(InstrumentationProcessor.java:86)
at org.apache.camel.processor.TryProcessor.process(TryProcessor.java:101)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)