나는 매우 일반적인 시나리오라고 생각합니다. 아파치 카멜을 통해 관리되는 인보이스 시스템이 있습니다. 문제가 발생하면 관리자에게 이메일 알림을 보내고 싶습니다.메일 서버가 다운 된 경우 Apache Camel SMTP 구성 요소가 전체 버스를 중지합니다.
낙타 예외 처리에 대한 책을 읽은 후, 나는이 함께했다 : (내 봄 XML 내부)
<!-- General retrasmission policy set to 3 times -->
<errorHandler id="deadChannel" type="DeadLetterChannel"
deadLetterUri="direct:invoice-error">
<redeliveryPolicy maximumRedeliveries="2"
redeliveryDelay="1000" backOffMultiplier="2" useExponentialBackOff="true" />
</errorHandler>
<!-- Problematic invoices create email alerts to the administrator -->
<route id="invoices-with-errors">
<from uri="direct:invoice-error" />
<bean ref="emailAlert" method="handleProblematicInvoice" />
<to
uri="smtp://{{errormail.host}}?to={{errormail.to}}&subject={{errormail.subject}}&from={{errormail.from}};debugMode=true;connectionTimeout=5000" />
</route>
이 내 사용 사례에 대한 OK 작동합니다. 예외가 발생하면 이 실제로 정의 된 주소로 전송됩니다.
그러나 코너 사례를 테스트하기 위해 내부 이메일 서버를 중단하여 이 발생하는지 확인했습니다. Camel이 이메일 보내기를 시도하고 5 초 후에 시도를 중단 할 것을 기대했습니다. (위의 smpt URL에있는 connectionTimout 옵션에서 설정 한대로)
그러나 전체 이용 일정은 중단됩니다! 이것은 단순히 받아 들일 수 없다! 메일 서버가 100 % 향상 될 것이라고 보장 할 수 없습니다.
여기에 뭔가가 있습니까? 전자 메일 알림을 모두 삭제해야합니까, 아니면 낙타가 메일 서버가 다운되었을 때 가 아닌에 매달려 있어야합니까?
대답
라인
debugMode=true;connectionTimeout=5000
는
debugMode=true&connectionTimeout=5000
기본 내부 서버로 릴레이 할 로컬 호스트 SMTP 스풀을 설정 하시겠습니까? –
@ Steve-o Ι는 프로덕션에 액세스 할 수 없습니다. IT 서비스 .war 파일 만 보내고 배포 할 수 있습니다. 나는 그들에게 아무것도 보낼 수 없다. – kazanaki