我正在开发一个基于消息的服务,该服务将所有传入请求排队并稍后处理它们。处理错误的最佳实践是什么。例如,将信息发送到下一个系统时出现格式错误的消息或通信错误。
通过使用事务,可以处理后者,但是当消息格式错误时,重试或保留它是没有用的。有什么想法可以针对不同的场景实现不同的错误处理,如果是,应该怎么做?
谢谢!
我正在开发一个基于消息的服务,该服务将所有传入请求排队并稍后处理它们。处理错误的最佳实践是什么。例如,将信息发送到下一个系统时出现格式错误的消息或通信错误。
通过使用事务,可以处理后者,但是当消息格式错误时,重试或保留它是没有用的。有什么想法可以针对不同的场景实现不同的错误处理,如果是,应该怎么做?
谢谢!
我认为你在正确的轨道上。这里有三种一般模式:
正常处理适用。
处理消息所需的某些资源可能不可用。在这种情况下,将事务设置为rollbackOnly,消息将被重新传递。希望您的 JMS 实现支持延迟重新传递的概念,这样在您的 MIA 资源再次可用之前,您不会重复处理相同的消息数千次。如果不是(是的,我在看你,WebSphere MQ),我通常会将消息推送到另一个 JMS 队列中,该队列保留用于暂时无法处理的消息并提交。当 MIA 资源重新上线时,我按程序从该队列中读取所有消息,并将它们写回主 [原始] 队列,在那里它们被处理完成。
抑制异常并提交事务。您将永远不会再看到该消息。要保留无效消息的审计跟踪:
不过,主要的一点是,如果您知道您将永远无法处理该消息,请确保您提交该事务。