gpt4 book ai didi

spring - 当 onMessage() 抛出 JMSException 时,JMS 队列会发生什么?

转载 作者:IT老高 更新时间:2023-10-28 13:55:03 26 4
gpt4 key购买 nike

我将 Spring 2.5 与实现 MessageListener 的自定义类一起使用。如果在我的 onMessage() 方法中抛出 JmsException,队列的状态会发生什么变化?

在调用 onMessage 的那一刻,消息是否被队列视为“已传递”?或者 JmsException 是否触发某种回滚并且消息重新进入队列?

提前致谢!

最佳答案

来自 JMS 1.1 规范...

4.5.2 异步传递

客户端可以使用 MessageConsumer 注册实现 JMS MessageListener 接口(interface)的对象。当消息到达消费者时,提供者通过调用监听器的 onMessage 方法来传递它们。

监听器有可能抛出 RuntimeException;但是,这被认为是客户端编程错误。表现良好的监听器应捕获此类异常并尝试将导致它们的消息转移到某种形式的特定于应用程序的“无法处理的消息”目的地。

监听器抛出 RuntimeException 的结果取决于 session 的确认模式。

  • AUTO_ACKNOWLEDGE 或DUPS_OK_ACKNOWLEDGE - 消息将立即重新交付。这JMS 提供程序将执行的次数之前重新发送相同的消息放弃取决于提供者。这JMSRedelivered 消息头字段将为重新传递的消息设置在这种情况下。
  • CLIENT_ACKNOWLEDGE - 下一条消息为听众送达。如果一个客户希望拥有以前的重新发送未确认的消息,它必须手动恢复 session 。
  • Transacted Session - 下一条消息为听众送达。这客户端可以提交或回滚 session (换句话说,一个RuntimeException 没有自动回滚 session )。

JMS 提供者应该使用正在抛出的消息监听器来标记客户端RuntimeExceptions 可能出现故障。

关于spring - 当 onMessage() 抛出 JMSException 时,JMS 队列会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com