Apache camel Apache Camel doTry doCatch未捕获akka Camel异常

Apache camel Apache Camel doTry doCatch未捕获akka Camel异常,apache-camel,akka,akka-camel,Apache Camel,Akka,Akka Camel,我们将XML DSL与Akka Camel(2.5.13)一起使用,并发现当Camel指向一个bean时,它不会被Camel捕获,而bean会异常地回答 我们的Scala代码: private def replyError(exception: ChannelException) { log.error(exception.error) sender ! akka.actor.Status.Failure(exception) } 我们的骆驼路线: <route id="

我们将XML DSL与Akka Camel(2.5.13)一起使用,并发现当Camel指向一个bean时,它不会被Camel捕获,而bean会异常地回答

我们的Scala代码:

private def replyError(exception: ChannelException) {
    log.error(exception.error)
    sender ! akka.actor.Status.Failure(exception)
}
我们的骆驼路线:

<route id="timer">
    <from uri="timer://test?period=3000&amp;delay=5000&amp;repeatCount=0"/>

    <doTry>

        <to uri="AKKABEAN"/>
        <doCatch>
            <exception>java.lang.Exception</exception>

            <log message="**********************************EXCEPTION HANDLED*******************************"/>

        </doCatch>
    </doTry>

</route>

java.lang.Exception
在骆驼日志上:

启动actor ActorName时出错:已存在同名的actor 正在运行akka.actor.InvalidActorNameException:actor name[ActorName] 不是独一无二的!在 akka.演员.地下城.儿童容器$NormalChildrenContainer.reserve(ChildrenContainer.scala:129) 在阿克卡。演员。地下城。儿童$class。保留儿童(儿童。斯卡拉:134) 在akka.actor.ActorCell.reserveChild(ActorCell.scala:431)在 akka.演员.地下城.儿童$class.makeChild(儿童.scala:272)在 akka。演员。地牢。儿童$class。attachChild(儿童。scala:48)在 akka.actor.ActorCell.attachChild(ActorCell.scala:431)位于 actor.ActorSystemImpl.actorOf(ActorSystem.scala:734)位于 com.app.akka.app$.createChannelActor(swap.scala:233)位于 com.app.akka.app$.createActor(swap.scala:199)位于 com.app.akka.app$.startChannelByName(swap.scala:137)位于 com.app.akka.actors.management.handleCommand(ManagementReceiver.scala:80) 在 com.app.akka.actors.management.manageChannel(ManagementReceiver.scala:66) 在 com.app.akka.actors.management.ManagementReceiver$$anonfun$receive$1.applyOrElse(ManagementReceiver.scala:52) 在 scala.PartialFunction$和applyOrElse(PartialFunction.scala:189) 在akka.actor.actor$class.aroundReceive(actor.scala:517)在 com.app.alla.actors.management.aroundReceive(ManagementReceiver.scala:14) 在akka.actor.ActorCell.receiveMessage(ActorCell.scala:588)的 akka.actor.ActorCell.invoke(ActorCell.scala:557)位于 akka.dispatch.Mailbox.processMailbox(Mailbox.scala:258)位于 akka.dispatch.Mailbox.run(Mailbox.scala:225)位于 akka.dispatch.Mailbox.exec(Mailbox.scala:235)位于 akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)位于 akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 在 akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在 akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 2018-08-13 10:11:45807错误 org.apache.camel.processor.DefaultErrorHandler未能传递的 (ExchangeId上的消息ID:ID-my-pc-1534165894710-0-25: ID-my-pc-1534165894710-0-26)。尝试传递后耗尽:1 捕获:ChannelException(启动actor ActorName:actor时出错) 相同的名称已在运行,映射(MessageExchangeId-> ID-my-pc-1534165894710-0-26,面包屑标-> ID-my-pc-1534165894710-0-26,命令类型->启动参与者,ID参与者-> ActorName)

如果我使用一个只返回一个错误的bean,它工作得非常好,例如:

<bean id="forced" class="java.lang.Exception">
    <constructor-arg index="0" value="This is forced"/>
</bean>


你知道是什么原因吗?

stacktrace错误说你已经有一个同名的Akka演员在运行-所以这听起来像是Akka某个地方的命名冲突。谢谢@ClausIbsen。是的,没错。该错误是在尝试使用现有参与者的名称创建参与者时引起的。我们正试图捕获该异常以相应地继续。但由于某些原因,即使在发送基本的throwable时,也不会捕获异常。