使用Spring JMS进行错误处理的最佳实践

时间:2011-08-09 09:00:49

标签: spring jms queueing

我正在研究基于消息的服务,该服务将所有传入的请求排队并稍后处理它们。处理错误的最佳做法是什么?例如,在将信息发送到下一个系统时,格式错误的消息或通信错误。

通过使用事务,可以处理后者,但是当消息格式错误时,没有必要重试它或保留它。是否有任何想法为不同的场景实现不同的错误处理,如果是,应该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:12)

我认为你走在正确的轨道上。这里有三种一般模式:

  • 该消息有效且可以处理

正常处理适用。

  • 该消息有效,但现在无法处理

也许您处理邮件所需的某些资源不可用。在这种情况下,将事务设置为 rollbackOnly ,然后重新传递消息。希望您的JMS实现支持延迟重新传递的概念,这样您就不会再次处理相同的消息数千次,直到您的MIA资源再次可用。如果不是(是的,我正在看着你,WebSphere MQ),我通常做的是将消息推送到为临时无法处理的消息和提交保留的另一个JMS队列。当MIA资源重新上线时,我会在程序上读取该队列中的所有消息,并将它们写回主[原始]队列,然后将它们处理完毕。

  • 消息无效

取消异常并提交事务。你永远不会再看到那条消息了。要保留无效消息的审计跟踪:

  • 将无效消息写入错误队列,稍后可以对其进行检查。
  • 注销消息的内容
  • 保留JMX无效消息计数器(按类型,源队列,解析错误等分类)。

但重点是确保在知道的情况下提交交易,永远不会能够处理该消息。