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

命令和查询端之间的axon事务管理器

子车鸿运
2023-03-14

我有一个使用axon 4.4.2的spring boot maven多模块项目,项目的层次结构如下:

application
--core
--command-side
----command-side-axon
----command-side-rest
--query--side
----query-side-persistence
----query-side-rest

我有一个创建新目录的例子,如下所示,当我从命令端REST发送请求时,它总是返回一个id作为响应,即使查询端持久性崩溃,并且数据没有保存在数据库中。在这种情况下,我如何处理事务?我希望当查询端持久性崩溃时,事件不会保存在事件库中,并引发异常。

@PostMapping
public String save(@RequestBody Catalog catalog) {
    return (String) commandGateway.sendAndWait(new CreateCatalogCommand(catalog));
}
@CommandHandler
public void handle(CreateCatalogCommand cmd) {
    apply(new CatalogCreatedEvent(cmd.externalId, cmd.name));
}

@EventSourcingHandler
@Order(1)
public void on(CatalogCreatedEvent evt) {
    this.externalId = evt.externalId;
}
@EventHandler
@Transactional(propagation = Propagation.REQUIRED)
@Order(2)
public void on(CatalogCreatedEvent event) {}

共有1个答案

竺辉
2023-03-14

关于你的主要问题,我想我可以给你一些关于这件事的信息:

我希望当查询端持久性崩溃时,事件不会保存在事件库中,并引发异常。

嗯,这基本上意味着你根本不想使用CQRS。CQRS所代表的是命令模型(例如,处理命令并发布事件的聚合)和查询模型(例如,处理更新模型的事件的类)的分离。

希望这能对情况有所了解,艾曼!

 类似资料:
  • 为了这个问题,我正在做一个项目,其中有两个微服务: null 根据我所读到的,为了进行这种更改,我们需要做以下几点: 从->切换 更改配置以启用分布式命令 使用SpringCloud或JCloud连接微服务 将AxonFramework添加到遗留InvoiceService项目并处理接收到的saga事件。 这是我们遇到麻烦的第四点:发票服务是由一个不愿意进行更改的单独团队维护的。 在这种情况下,使

  • 这是有效的,当我将命令发送到命令服务时,我可以检查RabbitMQ队列中正确的JSON格式。 我的聚合接收命令和触发器事件,它们正确地存储在mySQL-EventStore中。在这里,事件是xml格式的。 现在来了棘手的部分。我使用axon-springboot通过属性再次将事件发送到rabbit队列: 警告,并且从未调用我的h2-repository-service。 我担心我为rabbit配置

  • 问题内容: 查询,本机查询,命名查询和类型查询之间有什么区别?“独立”查询是否存在,还是只是缩写?在我看来,本机查询是用简单sql编写的查询,而命名查询与实体(hibernate映射)有关。有人可以简要解释一下吗? 问题答案: 询问 查询是指JPQL / HQL查询,其语法类似于通常用于执行DML语句(CRUD操作)的SQL。 在JPA中,您可以使用创建查询。您可以查看API以获得更多详细信息。

  • 9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManager,从而能支持各种数据访问框架的事务管理,PlatformTransactionManager接口定义如下: public interface PlatformTransactionManager { T

  • 实际付款将由外部合作伙伴完成。我想通过以下事件在我的系统中跟踪它:支付请求发出后,合作伙伴同意支付或拒绝支付。 命令发出的每个事件都应该登记在同一个数据库事务中。 给我在Axon 4的搭档打电话的最佳做法是什么? null 记住这句话,我就明白了我应该创建和事件一样多的命令?但在这种情况下,所有这些命令的意义是什么?我是不是应该得到这样的结果: 我的命令将生成事件。 然后从某个地方打电话给我的合作

  • 管理交易 在 1.4 版更改: 对会话事务管理进行了修改,使其更清晰、更易于使用。特别是,它现在具有“autobegin”操作的特点,这意味着事务开始的点可以被控制,而不必使用传统的“autocommit”模式。 这个 Session 一次跟踪单个“虚拟”事务的状态,使用一个名为 SessionTransaction 。然后,该对象利用基础的 Engine 或引擎,而这些引擎 Session 对象