java – 何时在队列/数据库失败时关闭消息处理?

对于应用程序接收消息,将它们持久保存到数据库以及可能发送消息的常见情况,这更像是一个最佳实践问题.

>假设事务性排序原子提交;什么时候关闭应用程序的好政策是什么?
>如果数据库失败,应用程序可能会被消息淹没,最终会拒绝该消息.它应该立即放弃吗?
>如果出站消息传递服务失败,则数据库将充满回滚.再次,最好立即放弃吗?

关于如何在这种情况下最好强制关闭spring应用程序的任何提示,更多布朗尼指向,因为默认侦听器包含将捕获任何运行时异常并继续运行.

最佳答案 根据我的理解,您正在寻找以下内容:

>不要仅仅因为应用程序无法处理来自入站队列的消息.
>如果在处理期间发生错误,何时停止处理.

首先,分析您正在处理的基础设施以及您必须处理的情况非常重要.典型的停机时间以及它们在系统的各个层中出现的频率.网络有多可靠,你是一台rac服务器等.

> JMS已经提供了重试机制.如果消息处理失败,请将其发送回队列,直到退休为止.只有在加上延迟时才有意义,这样就不会发生泛滥.如果小延迟不会影响交易,我建议使用延迟消息.根据您的JMS提供程序,支持自定义容器.当无法处理来自入站队列的消息时,使用死信或异常队列可以帮助丢失消息.
>再次,你可以成为最好的情况判断.您可以将属性定义为到死信队列的多次连续发送构成关闭条件.您可以在系统测试期间调整它以避免误报.

点赞