Spring과 함께 Apache Camel을 사용하여 Java 서비스에서 메시지를 보내고 있습니다. 내가 교환에서 어떤 오류가 발생하면 특정 이벤트를 처리/트리거해야합니다. 내 목적을 달성하기 위해 아래 코드를 사용하고 있습니다. I을 테스트하기 위해JMS 연결이 던지지 않음 JMSSecurityException이 무단 라우트로 메시지를 보낼 때
try
{
producerTemplate.sendBody(endPoint, bytes);
}
catch (final RuntimeCamelException exception)
{
LOGGER.error("Exception occured in sendBody", exception.getMessage(), exception);
handleError(); // handle error here.
}
잘못된 경로 이름 broadcast.SIMULATOR.ROUTE1에 엔드 포인트의 값을 설정합니다. 위의 코드를 실행하면 콘솔에서 다음과 같은 오류가 표시 될 수 있지만 catch 블록에는 절대로 들어오지 않습니다.
[33m16:15:51,714 WARN [org.springframework.jms.connection.CachingConnectionFactory] (QpidJMS Connection Executor: ID:7dacac8c-93ce-48c0-92fe-8dc0e8:1) Encountered a JMSException - resetting the underlying JMS Connection: javax.jms.JMSSecurityException: [email protected] cannot publish to broadcast with routing-key broadcast.SIMULATOR.ROUTE1 (/builddir/build/BUILD/qpid-cpp-1.36.0/src/qpid/broker/amqp/Authorise.cpp:126) [condition = amqp:unauthorized-access]
at org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:143) [qpid-jms-client-0.23.0.jar:]
at org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:117) [qpid-jms-client-0.23.0.jar:]
경로에 여러 개의 메시지를 보내고 있습니다. 첫 번째 메시지의 경우 JMSSecurityException이 콘솔에 기록되고 실행이 계속됩니다. 두 번째 메시지 이후부터 IllegalStateException (세션 닫힘)으로 catch 내부로 실행됩니다.
첫 번째 메시지 (JMSSecurityException의 경우)를 사용하여 catch 블록 내에서 실행을 가져 오는 방법은 무엇입니까?
감사합니다. JmsConnectionFactory 및 해당 작업에 대해 유사한 속성 forceSyncSend = true가 발견되었습니다. –