JMS会议,"交易"和"自动确认"

时间:2018-01-28 14:00:41

标签: jms spring-jms jms-topic jmstemplate

JMS会话究竟意味着什么?

JMS会话是否可以"交易"是什么意思?

JMS会话与"自动确认"是什么意思?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

会话的发送/接收操作是已确认已处理

想象一下消费者崩溃:如果消费者表示尚未处理消息,通常您希望重新发送消息。因此,可以从使用者向Broker发送确认(ACK),以告知JMS代理已经处理了该消息。不仅收到了,还存储在数据库中,或者消费者正在做的任何工作。如果在崩溃后重新启动消费者,它将收到所有尚未确认的消息。

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

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

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