我应该使用事务吗

 常见问题解答 > JMS > 我应该使用事务吗

客户端消费消息主要有四种方法:

  1. 自动确认
  2. 通过 Message.acknowledge()进行显式确认
  3. JMS 事务
  4. XA

关于 XA 的讨论,请参见: 我应该使用 XA 吗

1 & 2 和 3 & 4 之间的主要区别在于,后者允许在处理过程中出现错误时回滚并重新传递消息。没有 JMS “取消确认”。因此,出于这个原因,在大多数情况下,JMS 事务应该优先于消息确认。

人们普遍误认为事务本质上很慢。实际上,从代理的角度来看,使用 JMS 事务与调用 Message.acknowledge()在性能上几乎没有区别。但是,当交付模式设置为 持久时,会产生性能损失。这会导致代理阻塞,直到提交同步到磁盘。这类似于使用非事务性 JMS 会话时 Message.acknowledge()阻塞的方式。

事务支持也适用于非持久性交付模式。

批量事务是处理消息的最快方式!

值得注意的是,消费持久性消息的最快方式是使用 JMS 事务结合消息批处理,例如,让提交边界涵盖多个消息,而不仅仅是一个消息。这适用于生产者和消费者,以及既是生产者又是消费者的客户端。

当使用事务时,可以以单个原子步骤发送例如 1000 个消息的批次。消息传输是异步的,因此非常快。生产者只需要在每个批次进行一次提交,以最大限度地减少由于磁盘同步而产生的延迟。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛标志和 Apache ActiveMQ 项目标志是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 许可。