在配置注入时未检测到Axon 4-ProcessingGroup批注的类

时间:2019-03-01 13:51:08

标签: spring spring-boot axon

(最初登录GitHub,但以为我会将它移给有相同问题的任何人,并帮助开发团队将问题保留在同一位置。)

我不确定这是我对框架的无知还是实际问题,请耐心等待,因为我在事件重播方面几乎找不到有关Axon 4的文档。

场景:

@Component
@ProcessingGroup("projections")
public class AddEventHandler {

    @EventHandler
    public void on(AddEvent addEvent, ReplayStatus replayStatus){
    }

    @ResetHandler
    public void onReset() { // will be called before replay starts
        // do pre-reset logic, like clearing out the Projection table for a clean slate
       // this does not get executed
    }
}

@Configuration
public class AxonConfig {

    @Autowired
    private EventProcessingModule eventProcessingModule;

    @Autowired
    public void configureProcessors(EventProcessingConfiguration configuration) {
        configuration
                .eventProcessorByProcessingGroup("projections",
                        TrackingEventProcessor.class)
                .ifPresent(trackingEventProcessor -> {
                    trackingEventProcessor.shutDown();
                    trackingEventProcessor.resetTokens();
                    trackingEventProcessor.start();
                });
    }
}

这取自Replaying Events Documentation

启动应用程序时永远不会执行ifPresent内容,因此不会重置令牌。我可以通过删除令牌来手动强制事件的重播。上面提到的配置是我更改过的唯一配置,其他所有配置都在自动配置上运行。

令牌存储是Microsoft SQL Server,我能看到的所有交互似乎都很好(事件持续存在,当应用程序停止时令牌所有权会更新等)。

在运行时检查EventProcessingConfiguration时,eventProcessors属性为空,processingGroupAssignments属性也为空,这使我相信在运行Autowired配置后将处理ProcessingGroup批注,因此ifPresent将永远不会执行上面定义的代码。 / p>

版本信息:Spring Boot Starter:2.1.2,Axon Starter:4.0.3

1 个答案:

答案 0 :(得分:1)

在此处完成答案: https://github.com/AxonFramework/AxonFramework/issues/1006

引用答案:

  

现在要解决您遇到的问题-似乎您想在应用程序启动时重置一些查询模型。但是,在这种情况下,您遇到了配置顺序问题,即尚未启动TrackingEventProcessor,而已经调用了您创建的配置文件。

     

请注意,我们已计划在创建特定bean时对订购进行更具体的安排(如果您要问我,可能与Spring应用程序事件有关)-但是我们还没有,所以请耐心等待,直到返工完成已执行。

     

目前,您可以采用的最简单方法是提供专用的重播服务。然后,您可以将此ResetService / ReplayService与EventProcessingConfiguration关联,并使其包含一个无效的resetProjectors()方法。我建议在确定应用程序已完全连接的时间点调用此方法(例如,通过处理一些Spring应用程序事件)。

再次感谢Axon开发团队。