使用Spring Boot的Axonframework:在命令端使用基于JPA的Repository的情况下,查询端无法接收事件

时间:2017-09-12 06:12:13

标签: spring-boot axon

我用axon-spring-boot-starter创建了一个项目springaxon,用于研究axonframework。 。 如果我在命令端使用事件源,它工作正常。 (事实上​​,由于JPA可用,并且未声明bean userOrderRepository,因此默认情况下使用带有JPA事件存储引擎的事件存储) 我可以看到日志" ...收到OrderCreatedEvent ..."从查询方面。以下是相关的源代码。

UserOrder.java:
@Aggregate
@Entity
public class UserOrder

AxonConfiguration.java:
//Do not declare a repository

我喜欢命令端的基于JPA的Repository而不是事件源,所以我为聚合注释了一个存储库,并声明了这个存储库。 以下是相关的源代码。

UserOrder.java:
@Aggregate(repository="orderRepository")
@Entity
public class UserOrder

AxonConfiguration.java:
@Bean
@Autowired
public Repository<UserOrder> orderRepository(EntityManagerProvider entityManagerProvider, EventBus eventBus) {
    return new GenericJpaRepository<UserOrder>(entityManagerProvider, UserOrder.class, eventBus);
}  

但我无法获取日志&#34; ...收到OrderCreatedEvent ...&#34;这次来自查询方面。

我不知道这个,任何建议都表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:0)

调整用于聚合的存储库类型不应对事件总线功能产生任何影响,它只是将事件存储起来有点不同。

事件伴随的主要调整是,它们会在内部从DomainEventMessages更改为常规EventMessags。 不同之处在于DomainEventMessages具有根据事件采集聚合所需的聚合特定字段。 由于您不希望事件来源聚合,因此不再需要使用这些DomainEventMessages

也就是说,它们应该仍然存储,因此可以从您的查询端进行检索。

您是否确认您的活动仍存储在活动商店中? 您是否也可以将EventStore调整为(Simple)EventBus? 使用Spring Boot启动程序依赖项时,Axon中的默认值为EmbeddedEventStore,用于存储和发送事件。