问题标签 [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.
spring-boot - 轴突事件处理程序不工作
我正在开发一个小型 cqrs 实现,我对它很陌生。我想将每个处理程序(命令和事件)从聚合中分离出来,并确保所有处理程序都运行良好。命令处理程序从控制器触发,但从那里没有触发事件处理程序。任何人都可以请帮忙。
}
}
@Component 公共类 UserCommandHandler {
}
}
@Component 公共类 UserEventHandler {
}
}
microservices - 如何在 Netflix Conductor 中将微服务(或其方法)注册到 Task?
我一直在寻找比 AxonFramework 的 Saga 更复杂的工作流程——我们目前正在使用它——我在 Netflix Conductor 中找到了一个。可悲的是,我在互联网上搜索了一个像样的例子,但无济于事。
我的问题是,在 Netflix Conductor 中,如何定义和创建 Task 或 WorkflowTask,最重要的是,如何将微服务链接到它?这是来自 github 的 Netflix Conductor 代码:
请原谅我的困惑,因为我是 Netflix Conductor 的新手。
domain-driven-design - 聚合根工厂方法可以返回命令而不是发布事件吗?
在 Vaughn Vernon 的Implementing Domain-Driven Design
书中,他描述了在聚合根中使用工厂方法。一个例子是Forum
聚合根,它具有startDiscussion
返回聚合根的工厂方法Discussion
。
如何在事件溯源系统中实现这种工厂模式,特别是在 Axon 中?
我相信传统上,它可以以这种方式实现:
StartDiscussionCommand
-> DiscussionStartedEvent
-> CreateDiscussionCommand
->DiscussionCreatedEvent
我们触发 aStartDiscussionCommand
由 处理Forum
,Forum
然后发布 a DiscussionStartedEvent
。外部事件处理程序将捕获DiscussionStartedEvent
、 转换它并触发CreateDiscussionCommand
. 另一个处理程序将Discussion
使用实例化 aCreateDiscussionCommand
并Discussion
触发DiscussionCreatedEvent
.
或者,我们可以改为:
StartDiscussionCommand
-> CreateDiscussionCommand
->DiscussionCreatedEvent
我们触发StartDiscussionCommand
,这将触发一个命令处理程序并调用Forum
的 startDiscussion() 方法,该方法将返回CreateDiscussionCommand
. 然后处理程序将调度 this CreateDiscussionCommand
。另一个处理程序接收命令并使用它来实例化Discussion
. Discussion
然后会解雇DiscussionCreatedEvent
.
第一种做法涉及 4 个 DTO,而第二种做法仅涉及 3 个 DTO。
关于应该首选哪种做法的任何想法?还是有其他方法可以做到这一点?
java - Axon 框架:应用事件后聚合标识符必须为非空
使用轴突框架我有错误:
应用事件后,聚合标识符必须为非空。确保在处理创建事件时最迟初始化聚合标识符。我使用这个 StorageEngine:
当第二次收到aggregateId 的消息时,代码失败,就像在这个处理程序中一样:
但如果我使用它,它工作正常:
我应该如何为 postgres/mysql 数据库配置 eventStorageEngine?
java - Axon:Eventsourced Aggregate 无状态变化事件
我有一个用例,我想发布一个非状态改变事件作为触发器。
在绝大多数情况下,聚合将通过应用事件来发布事件。但是,有时需要将事件(可能从另一个组件中)直接发布到事件总线。要发布事件,只需将描述事件的有效负载包装在 EventMessage 中。GenericEventMessage.asEventMessage(Object) 方法允许您将任何对象包装到 EventMessage ...
该事件是从 Saga 内部发布的。
当我使用asEventMessage
并查看事件表时,我有点困惑。该事件具有一个聚合标识符,该标识符在系统的其余部分中不存在,并且类型条目是null
(在阅读文档时,有一段时间听起来预期的行为asEventMessage
等于从聚合中应用事件)。
因为我认为我在概念上谈论的事件是聚合的一部分,所以它应该指的是它,对吧?
所以我GenericDomainMessage
自己制作了一个并手动设置它的聚合标识符、序列号和类型:
此事件不会将(数据)状态更改引入其基础聚合。我将其视为在领域中具有重要意义的标志/触发器。
我还可以在命令处理程序中从聚合内发布事件,但是需要执行的一些操作超出了聚合的范围。这就是为什么 Saga 似乎更合适的原因。
所以我的问题是:
发布GenericDomainEventMessage
等于行为AggrgateLifeCycle#apply
吗?
聚合中应该有一个无操作处理程序还是轴突会正确处理这个?
cqrs - Axon Framework 与 Eventuate 比较
我们目前正在对 CQRS 和 Event Sourcing 进行一些研究,发现有两个主要框架可以解决这两个问题:Axon Framework和Eventuate。两者都在继续开发,而 Eventuate 现在在RBMH 存储库中得到更积极的开发。
我在 GIT 中为两者克隆了一些示例项目,并得出结论 Eventuate 看起来更轻量级,但我认为这是由于与 Axon 相比缺乏功能。
我徒劳地试图找到这两个框架之间的比较,在 Stackoverflow 中我也找不到。有人有意见吗?
axon - 有没有办法等待 Saga 的结果或异常?
假设我有一个可以在几毫秒内完成汇款的 Saga。我有 REST 控制器,它调用触发 Saga 的命令。如何等待 Saga 结束以检查结果或异常以让我的控制器作为响应返回?如果它只是一个不会触发 Saga 的单独命令,我可以使用命令网关和回调来通知我成功或失败。
更新:
在 Saga 结束后,我能够让我的控制器返回响应:
1) 我的控制器方法返回一个 DeferredResult 我保存到地图中
2) 我的控制器有一个事件处理程序,它侦听结束事件,从地图中检索 DeferredResult,并设置结果
有没有更好的方法来解决这个问题?
http - 使用 axonframework 跨多个实例引发和处理事件
我刚刚开始使用 axonframework 探索基于事件的编程。我看到支持引发和处理事件。
我有一个场景,其中有多个服务使用 http 在不同的实例/jvm 中与每个服务进行通信。
我现在想使用事件进行服务通信。我不确定我们如何通过网络传递事件并让它们由运行在不同 jvm/host 中的服务处理。
axonframework 是否为此提供任何支持,或者我是否应该为此直接与消息传递中间件集成。
java - 单独类 Axon 3.0.3 中的事件处理程序
我在这里使用 Axon & Spring 进行了相当简单的 CQRS 设置。
这是配置类。
这是我的聚合...
这是我在单独的 .java 文件中的 EventHandler ......
我正在使用 CommandGateway 发送原始创建命令。我在聚合中的 CommandHandler 可以正常接收命令,但是当我apply
在聚合中调用时,传递一个新事件,我在外部类中的 EventHandler 不会被调用。只有直接在 Aggregate 类中的 EventHandlers 才会被调用。
如果我尝试将事件直接发布到 EventBus,则会调用我的外部 EventHandler。
知道为什么我在apply
聚合中调用时没有调用外部 java 类中的 EventHandler 吗?