问题标签 [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 吗?
