JMS 会话,“交易”和“自动确认”

Joh*_*han 7 jms jmstemplate spring-jms jms-topic

JMS 会话到底是什么意思?

JMS 会话可以或不可以“交易”是什么意思?

JMS 会话可以带有或不带有“自动确认”是什么意思?

Axe*_*ehl 7

您可以将 JMS 会话视为连接与线程在该连接上的工作之间的链接。JMS 会话是“单线程上下文”,因此每个线程必须使用不同的会话。相比之下,JMS 连接可以在多个线程之间共享。此外,一个线程可以拥有多个会话。

发送/接收会话上的操作要么承认交易

想象一下消费者崩溃:如果消费者说它尚未处理消息,通常你想重新传递消息。因此,可以从使用者向 Broker 发送确认 (ACK)以告诉 JMS Broker 消息已被处理。不仅接收而且存储在数据库中,或者消费者正在做的任何工作。如果消费者在崩溃后重新启动,它将收到所有尚未确认的消息。

有不同形式的 ACK:自动确认意味着 API 会在您从回调中返回后为您调用acknowledge()。在其他情况下,您必须自己调用acknowledge()。

事务组在该会话上发送或接收操作(全有或全无)。所以你发送/发送/发送然后提交并知道在提交时消费者可以使用所有 3 条消息,或者没有。交易交付的优点:交付的最高保证,您可以对操作进行分组 - 缺点:延迟和可能的性能。

Session 的一个主要目的是保持事务的状态。如果您的会话是为事务处理而创建的 (SESSION_TRANSACTED),它知道您计划在事务中发送的所有消息,以及该事务是否已提交或回滚。


Sha*_*shi 6

所有信息都在此处 的JMS 规范中。 JMS 会话是一个对象,它维护与 JMS 提供者的连接以发送和接收消息。

一个事务处理会话支持一系列事务。每个事务将一组产生的消息和一组消耗的消息分组到一个原子工作单元中。实际上,事务将会话的输入消息流和输出消息流组织成一系列原子单元。当一个事务提交时,它的输入原子单元被确认并发送其关联的输出原子单元。如果事务回滚完成,则其生产的消息将被销毁,其消费的消息将自动恢复。

另一方面,在具有自动确认的 JMS 会话中,接收到的消息在传递给应用程序后,会自动从 JMS 提供程序中删除,而无需应用程序调用提交/回滚。自动确认对事务处理的会话没有影响。