我尝试使用本教程了解 JMS API 。在创建会话对象时,我们将 2 个参数传递给createSession(argument1,argument2)
.
argument1 值是一个boolean
值。
如果您指定,
true
: 这是一个交易会话。
false
: 这是一个非交易会话。
我的问题是,交易会话和非交易会话有什么区别。为此,我阅读了本教程。我比较明白。但我很想知道,这两种类型的会话在实际案例中哪里有用。
你能用一个简单的例子解释一下吗?
如果您必须在逻辑事务完成之前接收多条消息,事务处理会话很有用。
例如,您必须使用三条消息,然后才能将结果持久保存到数据库中。在这种情况下,完成对数据库的更新后,您提交队列会话以一次性确认三个消息。
否则,如果您的程序在您阅读了两条消息后终止,则这两条消息将丢失(如果您使用AUTO_ACKNOWLEDGE
)。
因此,交易和非交易之间的区别在于您确认的对象:在第一种情况下,它是会话,而另一种是单独的消息。
事务处理会话允许您执行多项操作,并且它们要么一起发生,要么不发生。一个典型的例子可能是您收到一条消息并发送另一条消息。JMS 被认为是一种可靠的传输方式,因此假设您要确保发送第二条消息。如果您在未处理的情况下执行这些操作,并且您的处理应用程序在接收之后和发送之前失败,那么您就丢失了信息。要解决此问题,您将使用事务处理会话。这将允许您接收一条消息,发送第二条消息,然后调用 Session.commit 使两者同时发生。