我正在使用Spring 2.5和我实现MessageListener的自定义类。如果在我的onMessage()方法中抛出了JmsException,那么队列的状态会发生什么?
在调用onMessage时,队列是否认为消息是“传递”的?或者JmsException是否触发某种回滚并且消息在队列中重新输入?
提前致谢!
答案 0 :(得分:15)
来自JMS 1.1规范......
4.5.2异步交付
客户端可以使用MessageConsumer注册实现JMS MessageListener接口的对象。当消息到达消费者时,提供者通过调用监听器的onMessage方法来传递它们。
侦听器可能抛出RuntimeException;但是,这被认为是客户端编程错误。表现良好的侦听器应该捕获此类异常,并尝试将消息转移到某种形式的特定于应用程序的“不可处理的消息”目的地。
侦听器抛出RuntimeException的结果取决于会话的确认模式。
JMS提供程序应该标记客户端正在抛出的消息侦听器 RuntimeExceptions可能出现故障。