当前位置: 首页 > 知识库问答 >
问题:

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

公冶弘壮
2023-03-14

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

 /**
    * Commits the current transaction, blocking.
    *
    * @throws ActiveMQException if an exception occurs while committing the transaction
    */
   void commit() throws ActiveMQException;

/**
    * Rolls back the current transaction.
    *
    * @throws ActiveMQException if an exception occurs while rolling back the transaction
    */
   void rollback() throws ActiveMQException;

我找不到任何开始交易的方法,我也不知道阿尔特弥斯的交易到底是什么。哪些操作可以提交或回滚?

我已经测试了几个场景,我有了我的结论。有两个操作可以提交或回滚:消息发送和消息接收(确认)。方法clientsession#commitclientsession#rollback仅用于提交和回滚消息发送和确认。开始事务不需要任何方法。只有可以提交或回滚的未提交消息。在会话创建期间可以使用的两个参数AutoCommitSenst和AutoCommitTacks对于artemis事务是必不可少的。

让我们考虑消息接收。

如果AutoCommittacks设置为true,则clientsession#commitclientsession#rollback不执行任何操作。

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

===Edit===

我删除了这个问题中与确认和个人确认有关的部分,因为它与主要问题无关,使我的问题过于复杂。

共有1个答案

谷梁永年
2023-03-14

没有方法用Artemis核心ClientSession“启动”事务。如果autocommitsentersautocommittacksfalse,则创建会话后执行的任何发送或ack都将是事务的一部分,直到调用commit()rollback()。根据为AutoCommitSentersAutoCommitTacks设置的值,发送和acking可以是同一个事务的一部分,也可以是其中之一。

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

 类似资料:
  • 今天遇到一些问题,我需要知道它们之间的具体区别 < code >编译“com . firebase:firebase-client-Android:2 . 4 . 0” 和 不要注意版本 所以请分享你的知识。

  • 我有一个非常简单的(现有的)web服务,我希望使用JDK8生成一个web服务客户机。 我使用的是纯JDK8工具链,这意味着我使用的是JDK8目录中的wsimport工具。 现在问题来了:JDK8中的wsimport工具生成的Java源代码不符合JDK8 Javadoc。正如您可能知道的那样,Javadoc工具在JDK8中变得更加严格。 请考虑以下简单模式: 为此,wsimport工具将生成Java

  • 我使用Angular 4应用程序与Asp核心web api,我测试了不同的端口在locahost上。我的WebApi需要Windows身份验证(需要获得登录用户名)。所有的电话都使用GET工作,但不幸的是,我无法得到POST工作。我为CORS设置了WebApi: angular 4客户端正试图发布文件

  • 我用的是protobuf-net。Grpc并试图从. NET Framework (4.7.2)进行调用。)gRPC客户端。完整的例子在这里:https://github.com/angelagyang/GRPCProtobufExample 下面是我的客户的一个片段: 使用此配置,我在调用服务器时得到错误。如果我在服务器上设置,我就能够连接到服务器。但是,我希望服务器需要客户端证书并通过指纹验证

  • null null 消息客户端-REST资源: 消息客户端-MessageClient: 保存消息的message server引导类具有与客户端相同的注释。 null null

  • 我正在考虑使用Ignite和。NET客户机进行一个项目。 我很好奇客户机是否支持。NET核心,因此可以在。NET核心应用程序中使用。 如果没有,未来是否计划了。NET核心支持?