全部, 我是JMS的新手,我对JMS中的 Session.rollBack()方法有疑问。 AFAIK,此方法用于在使用* SESSION_TRANSACTED *确认模式时将会话的所有操作回滚到JMS服务器(发送/接收)。现在假设我在接收/处理操作的catch块中调用此方法(是否合理?),告诉JMS服务器重新传递消息以进行处理,但即使重新传递,处理仍会抛出相同的异常,导致JMS服务器再次重新发送消息,因此它似乎是一个无限的过程。怎么处理这个问题?或者是否有为其设计的任何其他JMS功能?提前致谢!
答案 0 :(得分:1)
JMS中的回滚方法将回滚在该“事务”中发送和接收的任何消息。此处的事务是JMS会话的本地事务。
重新传递是否会导致问题实际上取决于异常发生的原因。如果是由于某些暂时性问题,那么重新发送可能会起作用。如果你遇到的问题一旦发生就会一直发生(这个问题的一个例子是JMS TextMessage,它的主体应该包含XML,但不包含)。
JMS API不为此提供任何解决方案。这通常由JMS提供程序负责,它的行为方式取决于您使用的是哪一个。例如,WebSphere MQ将重新发送到可配置的最大值,此时它将把它移到队列中以获取错误消息。 WebSphere Application Server中的服务集成总线具有类似的行为。我建议您查阅您的JMS提供程序文档,以确定它在这种情况下的确切行为。
如果您在应用程序服务器中运行,则回滚通常不会执行任何操作,因为应用程序服务器将为您管理事务。