问题标签 [axon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
621 浏览

java - 在 Axon 中重命名聚合后如何“向上转换”聚合类型

假设我有一个现有的聚合CustomAggregate和一个CustomEvent由聚合处理的事件。

一段时间后,事件存储已经包含此聚合的一些事件,我需要将聚合和事件重命名为NewCustomAggregateand NewCustomEvent。我更新了重命名事件的修订并创建了一个相应的处理事件重命名的 upcaster。

type作为事件存储的表中仍然指的是CustomAggregate. 因此,当我尝试像这样获取新聚合类型的所有事件时

我(显然)得到一个异常,说这个聚合类型没有事件。

有没有办法不仅考虑上转换中重命名/更改的事件,而且还考虑到对于某些事件修订,事件存储应该将NewCustomAggregate类型视为CustomAggregate

我使用的 Axon 版本是 2.4.6。

0 投票
1 回答
368 浏览

java - Axon Framework - 是否可以为多个 sagas 提供单个跟踪事件处理器?

让我们首先说我正在使用 Axon Framework 3.1.2 版本,并为@EventHandlersSagas 和 Sagas 启用了跟踪事件处理器。

正如我所见,为 Sagas 创建事件处理器的当前默认行为是为单个 Saga 创建单个跟踪事件处理器。这在微服务规模上运行良好,但在可能实现大量 Sagas 的大型单体应用程序中可能会成为问题。由于我正在编写这样的应用程序,我希望更好地控制正在运行的线程数量,这反过来又能让我更好地控制数据库连接池的使用、上下文切换和内存使用。理想情况下,我希望拥有与 CPU 内核一样多的跟踪事件处理器,其中每个事件处理器执行多个 saga 和/或@EventHandlers.

我已经认为我可以@EventHandlers通过@ProcessingGroup注释或EventHandlingConfiguration::assignHandlersMatching方法来做到这一点,但SagaConfiguration似乎没有公开类似的 API。事实上,最具体的SagaConfiguration::trackingSagaManager方法是硬编码来创建一个新TrackingEventProcessor对象,这让我觉得我现在想要实现的目标是不可能的。所以这是我的问题:是否有一些我遗漏的非直接方式可以让我在单个事件处理器的上下文中执行多个 Sagas?

0 投票
3 回答
392 浏览

domain-driven-design - 如何使用事件溯源实现复杂表单的命令和事件?

我想使用 Axon 框架实现 CQRS 和 ES

我有一个非常复杂的 HTML 表单,它代表了包含六个步骤的招聘流程。
ES 将有助于生成选定日期的历史统计数据并跟踪形式的变化。

管理员始终可以执行多项操作:

  • 指定负责每个步骤的人员
  • 为每个步骤提供注释
  • 每一步都接受或拒绝候选人
  • 打开/关闭短信或电子邮件通知
  • 分配标签

表单更新(仅区别)从 UI 应用程序发送到后端。

假设我只想对服务器端应用程序进行更改,问题是什么应该是命令,什么应该是事件,我考虑三个选项:


  1. 表单补丁是一个生成的命令Form Update Event

    • 该解决方案的缺点是每个事件处理程序都需要检查表单中的更改是否引用了此处理程序 ex。如果应该发送关于拒绝的电子邮件

  1. 表单补丁是一个生成多个事件的命令,例如:。Interviewer Assigned, Notifications Turned Off,Rejected on technical interview

    • 该解决方案的缺点是可能会生成一些事件,而其他事件则不会因为打破约束例如:Notifications Turned Off将成功但Interviewer Assigned由于分配未经授权的用户而失败。也许我应该在命令生成之前检查所有约束?

  1. 表单补丁转换为几个命令 ex: Assign InterviewerTurn Off Notifications每个命令生成事件 ex:Interviewer Assigned, Notifications Turned Off

    • 此解决方案的缺点是某些命令可能会失败,例如:Assign Interviewer可能由于分配未经授权的用户而失败。这将导致状态不一致,因为有些事件将存储在存储库中,有些则不会。也许我应该在命令生成之前检查所有约束?
0 投票
1 回答
595 浏览

spring-boot - 具有分布式查询模型的轴突寄存器跟踪处理器

我已经使用 axon 和 spring-boot 实现了 CQRS+ES 应用程序。我使用单独的查询模型和命令模型应用程序。我使用 rabbitmq 从命令模式发布事件。它工作正常。但是跟踪处理器实现在我的应用程序中不起作用。

这是我的查询模型

这是一个事件处理程序类

这是 yml 配置

我该怎么做才能正确。(任何人都可以建议教程或代码示例)

0 投票
1 回答
943 浏览

java - 如何在使用 Axon 框架时模拟 Spring Boot 存储库

我目前正在尝试使用 Axon 框架和 Spring Boot 实现一些应用程序,我需要为其中一个 sagas 编写单元测试。在这个传奇中,除了 axon 的功能之外,我还使用了 spring boot 存储库,我需要对其进行模拟以进行测试。

问题是,没有注入存储库 - 它始终为空。我真的很感激在这件事上的任何帮助。

在下面查找已发布的课程:

佐贺:

测试:

0 投票
1 回答
1267 浏览

axon - 在一个命令处理程序中使用多个聚合

假设我有 2 个聚合,订单和客户,以及一个 OrderPayCommand,在处理程序中,它将检查订单状态,并检查客户余额。如果全部成功,它将发送一个事件 OrderPaidEvent,该事件将由 Customer 聚合处理以更新余额。

那么,如何在一个命令处理程序中检查 2 个聚合的条件?那么,我是否以错误的方式使用它?

0 投票
0 回答
177 浏览

axon - 如何在微服务系统中使用 axon 和 Spring Cloud

我有一个微服务系统,5 或 6 个服务。我想用 Axon 上的事件源架构师来修改它。

我在文档中看到了分布式命令总线和事件的部分,但我仍然不太了解。谁能告诉我有关在 Spring Cloud 系统中实现 axon 的总体情况。比如如何配置命令总线、事件总线、MQ,以及如何配置数据源。事件如何存储在微服务中,以及如何从中生成聚合对象。

或者,是否有任何示例项目?我在github找到了2个,但是太旧了。

谢谢。

0 投票
3 回答
1320 浏览

cqrs - CQRS 写入数据库

在我们公司,我们正在开发一个基于微服务的系统,我们应用 CQRS 模式。在 CQRS 中,我们将命令和查询分开,因此我们必须开发 2 个微服务。目前,我被指派增强 CQRS 模式以将事件保存在单独的数据库中(事件源)。我知道拥有一个单独的事件数据库非常重要,但我们真的需要一个单独的写入数据库吗?Write数据库的实际用途是什么?

0 投票
1 回答
856 浏览

java - CQRS/ES - 处理投影错误

我正在开发一个 CQRS+ES 系统,主要使用 axon 框架,但实际上这个问题适用于任何实现。所以我有一个命令处理程序和 1 个或多个事件处理程序,在不同的 JVM、容器等上运行,并且在某些时候这些处理程序之一遇到错误。

我们有两种情况,一个“预期的”业务错误和一个“意外的”系统错误。据我了解,我们现在处于异步处理程序中,事件现在已成为事实,因此实际上我们不能直接回滚两种情况下的命令(因为它可能需要在许多其他投影中回滚并破坏 CQRS)。

所以我的问题是,这样的错误是否应该以账户分类账的方式“解决”,即通过发送一个新的“逆转”命令,然后以这样的方式传播到预测,以便现在解决失败的事件?

例如,假设我们有一个更新客户信用的命令。该事件被发布,一个投影更新其“总信用”统计数据,另一个将更新发布到 UI 的某些 websocket,最后,另一个维持信用状态 - 最后一个处理程序失败。我们是否应该发送回滚业务事务的命令,再次扣除信用,再次更新 websocket 等?如果是轴突,是否有某种方式可以将其捕获为交易?

0 投票
2 回答
546 浏览

axon - Axon 框架:微服务应该共享事件吗?

我们正在将单体架构迁移到更分布式的架构,我们决定使用 AxonFramework。

在 Axon 中,由于消息是一等公民,因此您可以将它们建模为 POJO。

现在我想知道,既然一个事件可以由一个服务分派并监听任何其他事件,我们应该如何处理事件分发。

我的第一个冲动是将它们作为 JAR 文件打包到一个单独的项目中,但这违反了微服务的规则,即它们不应共享实现。

欢迎任何建议。