【发布时间】:2021-03-03 23:01:27
【问题描述】:
只是想确认 Axon 的预期行为,而不是我在应用程序中看到的行为。我们有一个与 Axon 框架集成的定制 Kafka 发布者,以及一个由 Cassandra 支持的定制事件存储。
我看到的问题如下:(1) 我发布了一个命令(例如 CreateServiceCommand),该命令命中了 ServiceAggregate 的构造函数,然后 (2) 将 ServiceCreatedEvent 应用于聚合。 (3) 我们看到域事件在后端持久化并通过 EventBus(我们有一个 Kafka 消费者)发布。
一切都很好,但假设我再次使用相同的聚合标识符发布相同的命令。我确实看到 ServiceCreatedEvent 被应用于调试器中的聚合,但是由于该键已经存在域事件记录,因此没有任何内容被持久保存到后端。同样,一切都很好,但是我看到 ServiceCreatedEvent 被发布到 Kafka 并被我们的侦听器使用,这是意外行为。
我想知道这是否是 Axon 的预期行为,或者我们的 Kafka 集成是否应该确保我们不会通过 EventBus 发布重复事件。
编辑:
我在 Axon 的 JPA 事件存储中进行了交换,并在尝试发出命令以创建已存在的聚合时看到了以下日志。那么这个问题确实是由于我们的自定义事件存储存在缺陷。
"oracle.jdbc.OracleDatabaseException: ORA-00001: unique constraint (R671659.UK8S1F994P4LA2IPB13ME2XQM1W) violated\n\n\tat oracle.jdbc.driver.T4CTTIoer11.processError
【问题讨论】:
标签: apache-kafka cqrs axon