问题标签 [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 回答
1771 浏览

spring-boot - 轴突事件处理程序不工作

我正在开发一个小型 cqrs 实现,我对它很陌生。我想将每个处理程序(命令和事件)从聚合中分离出来,并确保所有处理程序都运行良好。命令处理程序从控制器触发,但从那里没有触发事件处理程序。任何人都可以请帮忙。

}

}

@Component 公共类 UserCommandHandler {

}

}

@Component 公共类 UserEventHandler {

}

}

0 投票
3 回答
3142 浏览

microservices - 如何在 Netflix Conductor 中将微服务(或其方法)注册到 Task?

我一直在寻找比 AxonFramework 的 Saga 更复杂的工作流程——我们目前正在使用它——我在 Netflix Conductor 中找到了一个。可悲的是,我在互联网上搜索了一个像样的例子,但无济于事。

我的问题是,在 Netflix Conductor 中,如何定义和创建 Task 或 WorkflowTask,最重要的是,如何将微服务链接到它?这是来自 github 的 Netflix Conductor 代码:

请原谅我的困惑,因为我是 Netflix Conductor 的新手。

0 投票
2 回答
483 浏览

domain-driven-design - 聚合根工厂方法可以返回命令而不是发布事件吗?

在 Vaughn Vernon 的Implementing Domain-Driven Design书中,他描述了在聚合根中使用工厂方法。一个例子是Forum聚合根,它具有startDiscussion返回聚合根的工厂方法Discussion

如何在事件溯源系统中实现这种工厂模式,特别是在 Axon 中?

我相信传统上,它可以以这种方式实现:

StartDiscussionCommand-> DiscussionStartedEvent-> CreateDiscussionCommand->DiscussionCreatedEvent

我们触发 aStartDiscussionCommand由 处理ForumForum然后发布 a DiscussionStartedEvent。外部事件处理程序将捕获DiscussionStartedEvent、 转换它并触发CreateDiscussionCommand. 另一个处理程序将Discussion使用实例化 aCreateDiscussionCommandDiscussion触发DiscussionCreatedEvent.

或者,我们可以改为: StartDiscussionCommand-> CreateDiscussionCommand->DiscussionCreatedEvent

我们触发StartDiscussionCommand,这将触发一个命令处理程序并调用Forum的 startDiscussion() 方法,该方法将返回CreateDiscussionCommand. 然后处理程序将调度 this CreateDiscussionCommand。另一个处理程序接收命令并使用它来实例化Discussion. Discussion然后会解雇DiscussionCreatedEvent.

第一种做法涉及 4 个 DTO,而第二种做法仅涉及 3 个 DTO。

关于应该首选哪种做法的任何想法?还是有其他方法可以做到这一点?

0 投票
1 回答
1315 浏览

java - Axon 框架:应用事件后聚合标识符必须为非空

使用轴突框架我有错误:

应用事件后,聚合标识符必须为非空。确保在处理创建事件时最迟初始化聚合标识符。我使用这个 StorageEngine:

当第二次收到aggregateId 的消息时,代码失败,就像在这个处理程序中一样:

但如果我使用它,它工作正常:

我应该如何为 postgres/mysql 数据库配置 eventStorageEngine?

0 投票
1 回答
702 浏览

java - Axon:Eventsourced Aggregate 无状态变化事件

我有一个用例,我想发布一个非状态改变事件作为触发器。

在绝大多数情况下,聚合将通过应用事件来发布事件。但是,有时需要将事件(可能从另一个组件中)直接发布到事件总线。要发布事件,只需将描述事件的有效负载包装在 EventMessage 中。GenericEventMessage.asEventMessage(Object) 方法允许您将任何对象包装到 EventMessage ...

该事件是从 Saga 内部发布的。

当我使用asEventMessage并查看事件表时,我有点困惑。该事件具有一个聚合标识符,该标识符在系统的其余部分中不存在,并且类型条目是null(在阅读文档时,有一段时间听起来预期的行为asEventMessage等于从聚合中应用事件)。

因为我认为我在概念上谈论的事件是聚合的一部分,所以它应该指的是它,对吧?

所以我GenericDomainMessage自己制作了一个并手动设置它的聚合标识符、序列号和类型:

此事件不会将(数据)状态更改引入其基础聚合。我将其视为在领域中具有重要意义的标志/触发器。

我还可以在命令处理程序中从聚合内发布事件,但是需要执行的一些操作超出了聚合的范围。这就是为什么 Saga 似乎更合适的原因。

所以我的问题是:

发布GenericDomainEventMessage等于行为AggrgateLifeCycle#apply吗?

聚合中应该有一个无操作处理程序还是轴突会正确处理这个?

0 投票
1 回答
10718 浏览

cqrs - Axon Framework 与 Eventuate 比较

我们目前正在对 CQRS 和 Event Sourcing 进行一些研究,发现有两个主要框架可以解决这两个问题:Axon FrameworkEventuate。两者都在继续开发,而 Eventuate 现在在RBMH 存储库中得到更积极的开发。

我在 GIT 中为两者克隆了一些示例项目,并得出结论 Eventuate 看起来更轻量级,但我认为这是由于与 Axon 相比缺乏功能。

我徒劳地试图找到这两个框架之间的比较,在 Stackoverflow 中我也找不到。有人有意见吗?

0 投票
1 回答
1117 浏览

axon - 有没有办法等待 Saga 的结果或异常?

假设我有一个可以在几毫秒内完成汇款的 Saga。我有 REST 控制器,它调用触发 Saga 的命令。如何等待 Saga 结束以检查结果或异常以让我的控制器作为响应返回?如果它只是一个不会触发 Saga 的单独命令,我可以使用命令网关和回调来通知我成功或失败。

更新:

在 Saga 结束后,我能够让我的控制器返回响应:

1) 我的控制器方法返回一个 DeferredResult 我保存到地图中

2) 我的控制器有一个事件处理程序,它侦听结束事件,从地图中检索 DeferredResult,并设置结果

有没有更好的方法来解决这个问题?

0 投票
0 回答
235 浏览

java - 将 JGroups 与 ActiveMQ 集成

我想使用 JGroups 传递我的消息(JSON 字符串)ActiveMQ。有没有人这样做过?我找不到任何示例或示例代码开始。我的主要挑战是设计。到目前为止,这是我的设计系统设计

我的设计正确吗?如果我能得到任何相同的示例代码,那就太好了。

0 投票
1 回答
766 浏览

http - 使用 axonframework 跨多个实例引发和处理事件

我刚刚开始使用 axonframework 探索基于事件的编程。我看到支持引发和处理事件。

我有一个场景,其中有多个服务使用 http 在不同的实例/jvm 中与每个服务进行通信。

我现在想使用事件进行服务通信。我不确定我们如何通过网络传递事件并让它们由运行在不同 jvm/host 中的服务处理。

axonframework 是否为此提供任何支持,或者我是否应该为此直接与消息传递中间件集成。

0 投票
1 回答
811 浏览

java - 单独类 Axon 3.0.3 中的事件处理程序

我在这里使用 Axon & Spring 进行了相当简单的 CQRS 设置。

这是配置类。

这是我的聚合...

这是我在单独的 .java 文件中的 EventHandler ......

我正在使用 CommandGateway 发送原始创建命令。我在聚合中的 CommandHandler 可以正常接收命令,但是当我apply在聚合中调用时,传递一个新事件,我在外部类中的 EventHandler 不会被调用。只有直接在 Aggregate 类中的 EventHandlers 才会被调用。

如果我尝试将事件直接发布到 EventBus,则会调用我的外部 EventHandler。

知道为什么我在apply聚合中调用时没有调用外部 java 类中的 EventHandler 吗?