简体   繁体   中英

Axon Event Handler not Working

I am developing a small cqrs implementation and I am very new to it. I want to segregate each handlers(Command and Event) from aggregate and make sure all are working well. The command handler are getting triggered from controller but from there event handlers are not triggered. Could anyone Please help on this.

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;
}

}

@Component public class 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;
}

}

@Component public class 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;
}

}

As far as I can tell, the only thing missing is that you aren't adding the User Aggregate to a Repository. By adding it to the Repository, the User is persisted (either by storing the generated events, in the case of Event Sourcing, or its state otherwise) and all Events generated by the Command Handler (including the Aggregate) are published to the Event Bus. Note that the Aggregate's @EventSourcingHandler s are invoked immediately, but any external @EventHandler s are only invoked after the command handler has been executed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM