2017-11-02 1 views
2

웹에서 문제에 대한 답변을 찾지 못했기 때문에이 질문을 열었습니다.CAMEL - onException을 사용하여 닫히지 않은 채널 폐쇄 예외

가 나는 TCP/IP 서버를 구현하기 위해 낙타를 사용하고 난 같은 경로를 정의 :

from("netty4:tcp://0.0.0.0:3510") 
    .to("file:target/outbox"); 

나는이 서버에 데이터를 전송하는 클라이언트를 가지고있다. 나는이 클라이언트를 분리 할 때 내 로그에이 예외를 볼 수 있습니다

[Camel (camel-client) thread #0 - NettyEventExecutorGroup] WARN o.a.c.component.netty4.NettyConsumer - Closing channel as an exception was thrown from Netty. Caused by: [java.io.IOException - an existing connection was forcibly closed by the remote host] 

내 문제는 내가 onException 절을 사용하여이 예외를 잡을 수없는 생각이다.

onException(IOException.class) 
    .log("Exception: ${body}") 
    .handled(true) 
    .process(new ExceptionProcessor()); 

이 프로그램은 중지되지 않습니다하지만 클라이언트가 연결되면 처리를 잡으려면. 내 경로에 던져지는 다른 예외를 잡을 수 있습니다.

답변

2

예외가 이미 netty에서 catch되고 기록되므로 예외로 처리 할 수 ​​없습니다. 이 예외는 netty 구성 요소로 전파되지 않습니다.

해결책은 약간 까다 롭습니다. SimpleChannelInboundHandler를 확장하고 How can I detect network disconnection in Apache Camel?에 설명 된대로 channelInactive 메서드를 재정의 할 수 있습니다. 이 사용자 지정 처리기에서 응용 프로그램과 관련된 추가 정보와 교환 할 사용자 지정 속성을 설정할 수 있습니다.

+0

대단히 고맙습니다. 내가 설명 드린 솔루션을 사용하여 마침내 예외를 잡을 수있었습니다. – Imad

관련 문제