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

Kri*_*fer 7 spring jms queueing

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

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

谢谢!

Nic*_*las 12

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

  • 该消息有效且可以处理

正常处理适用.

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

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

  • 消息无效

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

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

最主要的一点,虽然,以确保您提交事务,如果你知道你将永远能够处理该消息.