spring-jms - Spring JMS 错误处理的最佳实践

标签 spring-jms queueing

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

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

谢谢!

最佳答案

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

  • 消息有效,可以处理

适用正常处理。

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

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

  • 该消息无效

抑制异常并提交事务。您将永远不会再看到该消息。要保留无效消息的审核跟踪:

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

不过,要点是,如果您知道您将永远无法处理该消息,请确保提交事务。

关于spring-jms - Spring JMS 错误处理的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6993717/

相关文章:

linux - Linux 多播中队列/缓冲延迟的可能位置在哪里?

php - rabbitmq AMQP::消费()

redis - 写入两个 Redis 服务器

java - 将 JMS 基础结构定义到 Spring 应用程序中的配置到底如何工作?

java - Spring jms - 重命名 DLQ

java - DefaultMessageListenerContainer,有关要监听的队列的知识

java - 无法使用 JMS 应用程序从 IBM MQ 获得响应

Spring 4.1 @JmsListener 配置

c# - 取消处于阻塞状态的任务的最佳方法是什么?

algorithm - 插入优先队列。 MIT c编程开放课件