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)