我有一个我认为很常见的情况。我有一个通过 Apache Camel 管理的发票系统。当出现问题时,我希望向管理员发送电子邮件警报。
在阅读了骆驼异常处理之后,我想到了这个:(在我的 Spring 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>
这适用于我的用例。当抛出任何异常时,确实会向定义的地址发送一封电子邮件。
然而,为了测试极端情况,我停止了内部电子邮件服务器,看看会发生什么。我希望 Camel 尝试发送电子邮件并在 5 秒后停止尝试(如上面 smpt URL 中的 connectionTimout 选项中设置的那样)
然而实际上整个骆驼应用程序挂起!这简直不能接受!我不能保证邮件服务器会 100% 运行。
我在这里错过了什么吗?我应该完全放弃电子邮件警报的想法,还是 Camel 需要另一个特殊选项来在邮件服务器关闭时不挂起?
回答
线
debugMode=true;connectionTimeout=5000
应该
debugMode=true&connectionTimeout=5000