【问题标题】:Axon Event Handler not Working轴突事件处理程序不工作
【发布时间】:2016-10-17 06:22:18
【问题描述】:

我正在开发一个小型 cqrs 实现,我对它很陌生。 我想将每个处理程序(命令和事件)与聚合和 确保一切正常。命令处理程序被触发 从控制器但从那里没有触发事件处理程序。可以 任何人请帮忙。

public class User extends AbstractAnnotatedAggregateRoot<String> {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@AggregateIdentifier
private String userId;
private String userName;
private String age;

public User() {

}

public User(String userid) {
    this.userId=userid;
}

@Override
public String getIdentifier() {
    return this.userId;
}

public void createuserEvent(UserCommand command){
    apply(new UserEvent(command.getUserId()));
}

@EventSourcingHandler
public void applyAccountCreation(UserEvent event) {
    this.userId = event.getUserId();
}

}

public class UserCommand {

private final String userId;

public UserCommand(String userid) {
    this.userId = userid;
}

public String getUserId() {
    return userId;
}

}

@组件 公共类 UserCommandHandler {

@CommandHandler
public void userCreateCommand(UserCommand command) {
    User user = new User(command.getUserId());
    user.createuserEvent(command);
}

}

public class UserEvent {

private final String userId;

public UserEvent(String userid) {
    this.userId = userid;
}

public String getUserId() {
    return userId;
}

}

@组件 公共类 UserEventHandler {

@EventHandler
public void createUser(UserEvent userEvent) {
    System.out.println("Event triggered");
}

}

@Configuration
@AnnotationDriven
public class AppConfiguration {
@Bean
public SimpleCommandBus commandBus() {
    SimpleCommandBus simpleCommandBus = new SimpleCommandBus();
    return simpleCommandBus;
}

@Bean
public Cluster normalCluster() {
    SimpleCluster simpleCluster = new SimpleCluster("simpleCluster");
    return simpleCluster;
}


@Bean
public ClusterSelector clusterSelector() {
    Map<String, Cluster> clusterMap = new HashMap<>();
    clusterMap.put("com.user.event.handler", normalCluster());
    //clusterMap.put("exploringaxon.replay", replayCluster());
    return new ClassNamePrefixClusterSelector(clusterMap);
}



@Bean
public EventBus clusteringEventBus() {
    ClusteringEventBus clusteringEventBus = new ClusteringEventBus(clusterSelector(), terminal());
    return clusteringEventBus;
}


@Bean
public EventBusTerminal terminal() {
    return new EventBusTerminal() {
        @Override
        public void publish(EventMessage... events) {
            normalCluster().publish(events);
        }
        @Override
        public void onClusterCreated(Cluster cluster) {

        }
    };
}

@Bean
public DefaultCommandGateway commandGateway() {
    return new DefaultCommandGateway(commandBus());
}


@Bean
public Repository<User> eventSourcingRepository() {
     EventStore eventStore = new FileSystemEventStore(new SimpleEventFileResolver(new File("D://sevents.txt")));
    EventSourcingRepository eventSourcingRepository = new EventSourcingRepository(User.class, eventStore);
    eventSourcingRepository.setEventBus(clusteringEventBus());
    AnnotationEventListenerAdapter.subscribe(new UserEventHandler(), clusteringEventBus());
    return eventSourcingRepository;
}

}

【问题讨论】:

  • 请编辑您的代码。

标签: spring-boot axon


【解决方案1】:

据我所知,唯一缺少的是您没有将 User 聚合添加到存储库中。通过将其添加到存储库,用户被持久化(通过存储生成的事件,在事件溯源的情况下,或者它的状态),并且命令处理程序(包括聚合)生成的所有事件都发布到事件总线. 请注意,Aggregate 的 @EventSourcingHandlers 会立即被调用,但任何外部的 @EventHandlers 只有在命令处理程序执行后才会被调用。

【讨论】:

  • 非常感谢阿拉德
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 2021-11-29
  • 2023-01-13
  • 1970-01-01
相关资源
最近更新 更多