社区首页 >问答首页 >Axon:事件源聚合无状态更改事件

Axon:事件源聚合无状态更改事件
EN

Stack Overflow用户
提问于 2017-03-09 08:51:47
回答 1查看 770关注 0票数 0

我有一个实用程序,我想发布一个非状态的唱唱事件作为触发器。

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

这一事件是在一部传奇中发表的。

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

因为我考虑了我所讨论的事件,在概念上它应该是指它的一部分,对吗?

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

代码语言:javascript
代码运行次数:0
复制
@SagaEventHandler
public void on (AnotherEvent event, @SequenceNumber long sequenceNr) {

    // ...

    GenericDomainEventMessage myEvent = new GenericDomainEventMessage(
            MyAggregate.class.getSimpleName(),
            identifier.toString(),
            sequenceNr + 1, 
            payload);
    eventStore.publish(myEvent);

}

此事件不会对其基础聚合引入(数据)状态更改。我把它当作一个标志/触发器,在这个领域有很强的意义。

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

所以我的问题是:

发布的GenericDomainEventMessageAggrgateLifeCycle#apply的行为相同。

聚合中应该有一个非op处理程序,还是axon会正确地处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-10 02:56:16

在Axon 3中,将事件发布到EventBus与从聚合中对事件进行apply()相同,但有一个区别:apply()也将调用任何可用的处理程序。如果没有可用的处理程序,则没有区别。

EventBus.publish的目的是发布不应该直接绑定到聚合的事件。在Event表中,它确实获得了一个聚合标识符(等于消息标识符),但这是一个技术细节。

在您的例子中,推荐的解决方案是apply()事件。事件不触发状态更改的事实在这一点上并不重要。您不必为它定义一个@EventSourcingHandler

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42701027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文