Apache Camel doTry doCatch не ловит исключение акка верблюда
Мы используем XML DSL с Akka Camel (2.5.13) и обнаружили, что когда верблюд указывает на боб, который отвечает с исключением, он не пойман верблюдом.
Наш код 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&delay=5000&repeatCount=0"/>
<doTry>
<to uri="AKKABEAN"/>
<doCatch>
<exception>java.lang.Exception</exception>
<log message="**********************************EXCEPTION HANDLED*******************************"/>
</doCatch>
</doTry>
</route>
На верблюжьем бревне:
Ошибка запуска актера ActorName: актер с тем же именем уже запущен akka.actor.InvalidActorNameException: имя актера [ActorName] не является уникальным! в akka.actor.dungeon.ChildrenContainer$NormalChildrenContainer.reserve(ChildrenContainer.scala:129) в akka.actor.dungeon.Children$class.reserveChild(Children.scala:134) в akka.actor.ActorCell.reserveChildscctor:431) в akka.actor.dungeon.Children$class.makeChild(Children.scala:272) в akka.actor.dungeon.Children$class.attachChild(Children.scala:48) в akka.actor.ActorCell.attachChild(ActorCell.scala:431) в akka.actor.ActorSystemImpl.actorOf(ActorSystem.scala:734) в com.app.akka.App$.createChannelActor(SwApp.scala:233) в com.app.akka.App$.createActor(SwApp.scala:199) на com.app.akka.App$.startChannelByName(SwApp.scala:137) на com.app.akka.actors.management.handleCommand(ManagementReceiver.scala:80) на com.app.akka.actors..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..runWorker(ForkJoinPool.java:1979) при akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 2018-08-13 10:11:45807 ОШИБКА org.apache.camel.processor.DefaultErrorHandler Ошибка доставки для (Идентификатор сообщения: ID-my-pc-1534165894710-0-25 на ExchangeId: ID-my-pc-1534165894710-0-26). Исчерпан после попытки доставки: 1 обнаружен: ChannelException (Ошибка запуска актера ActorName: актер с тем же именем уже запущен, Map(MessageExchangeId -> ID-my-pc-1534165894710-0-26, breadcrumbId -> ID-my-pc-1534165894710-0-26, COMMAND_TYPE -> START_ACTOR, ID_ACTOR -> ActorName))
Если я использую bean-компонент, который просто возвращает ошибку, он прекрасно работает, например:
<bean id="forced" class="java.lang.Exception">
<constructor-arg index="0" value="This is forced"/>
</bean>
Есть идеи, что вызывает это?