首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事务如何与ActiveMQ Artemis核心客户端一起工作?

事务如何与ActiveMQ Artemis核心客户端一起工作?
EN

Stack Overflow用户
提问于 2020-11-06 16:01:13
回答 1查看 536关注 0票数 1

我在文档中找不到关于artemis事务的足够信息。我不清楚artemis交易是如何工作的,所以我想澄清一下。org.apache.activemq.artemis.api.core.client.ClientSession类中有两种方法:

代码语言:javascript
复制
 /**
    * Commits the current transaction, blocking.
    *
    * @throws ActiveMQException if an exception occurs while committing the transaction
    */
   void commit() throws ActiveMQException;

代码语言:javascript
复制
/**
    * Rolls back the current transaction.
    *
    * @throws ActiveMQException if an exception occurs while rolling back the transaction
    */
   void rollback() throws ActiveMQException;

我找不到开始事务的任何方法,也不知道在artemis中到底什么是事务。哪些操作可以提交或回滚?

我已经测试了几种情况,并得出了我的结论。它是两个可以执行或回滚的操作:消息发送和消息接收(确认)。方法ClientSession#commitClientSession#rollback仅用于提交和回滚消息发送和确认。不需要使用任何方法来开始事务。只有未提交的消息可以提交或回滚。在会话创建过程中可以使用的两个参数autoCommitSendsautoCommitAcks对于artemis事务至关重要。

,让我们考虑一下消息发送.

如果autoCommitSends设置为true,那么ClientSession#commitClientSession#rollback什么也不做。

如果autoCommitSends设置为false,则必须在发送消息(ClientProducer#send)之后调用ClientSession#commit方法才能真正发送消息。方法ClientSession#commit提交(在此会话中)发送的所有消息和未提交的消息。可以通过调用ClientSession#rollback方法对消息进行回滚。方法ClientSession#rollback回滚所有发送的(在此会话中)和未提交的消息。

,让我们考虑一下消息接收.

如果autoCommitAcks设置为true,那么ClientSession#commitClientSession#rollback什么也不做。

如果autoCommitAcks设置为false,则必须在消息确认(ClientMessage#acknowledge)之后调用ClientSession#commit方法来真正确认按摩。方法ClientSession#commit提交所有已确认的消息(在此会话中)和未提交的消息。可以通过调用ClientSession#rollback方法对消息确认进行回滚。方法ClientSession#rollback回滚所有确认的(在此会话中)和未提交的消息。

我的结论正确吗?

===EDIT===

我删除了这个问题的一部分有关确认和individualAcknowledge,因为它是无关的主要问题,并使我的问题太复杂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-11 16:19:17

没有使用Artemis核心ClientSession“启动”事务的方法。如果autoCommitSendsautoCommitAcksfalse,那么会话创建后执行的任何发送或ack都将成为事务的一部分,直到调用commit()rollback()为止。根据为autoCommitSendsautoCommitAcks设置的值,发送和添加都可以是同一个事务的一部分,也可以是一个或另一个事务的一部分。

如果autoCommit是true,那么调用commit()rollback()不会对相应的操作产生任何功能影响。但是,客户端仍将向代理发送命令,并等待代理的响应。客户端有责任不调用这些操作,除非它是必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64717899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档