会话交易有用吗?

时间:2013-09-09 11:28:02

标签: java jms

我尝试使用this tutorial了解JMS API。在创建会话对象时,我们将2个参数传递给createSession(argument1,argument2)

argument1值是boolean值。

如果您指定,

true:这是一个交易会话。

false:这是一个非交易会话。

我的问题是,交易非交易会话之间有什么区别。为此我读了this tutorial。我明白了。但我很想知道,这两种类型的会话在实际案例中是有用的。

你能用一个简单的例子解释一下吗?

2 个答案:

答案 0 :(得分:1)

如果您必须在逻辑事务完成之前收到多条消息,则事务处理会话非常有用。

例如,在将结果保存到数据库之前,必须使用三条消息。在这种情况下,在完成对数据库的更新后,您将在队列会话上提交以在一个回合中确认三条消息。

否则,如果您的程序在阅读了两条消息后被终止,则这两条消息将丢失(如果您使用AUTO_ACKNOWLEDGE)。

因此,交易和非交易之间的差异是您确认的对象:在第一种情况下,它是会话,而另一种是单独的消息。

答案 1 :(得分:0)

事务处理会话允许您执行多项操作,并让它们一起发生或不发生。一个典型的例子可能是您收到一条消息并发送另一条消息。 JMS被认为是可靠的传输,因此假设您要确保发送第二条消息。如果你做这些事情是非交易的,你的处理应用程序在收到之后和发送之前就失败了,那么你就丢失了信息。要解决此问题,您可以使用事务处理会话。这将允许您接收一条消息,发送一秒,然后调用Session.commit以使两者同时发生。