Я играю с сервером аксона локально. Я запускаю контейнер docker на своем локальном компьютере с помощью команды docker run -d --name axonserver -p 8024:8024 -p 8124:8124 axoniq/axonserver
.
. Когда я запускаю мое приложение весенней загрузки, мой внешний обработчик событий перезапускает все предыдущие события, поэтому я вижу этот поток операторов журнала при запуске.
Тот же обработчик событий также публикует команду для агрегата, который затем добавляет новое событие в агрегат, который обрабатывает команды. Таким образом, мой агрегат в конечном итоге получает несколько событий, прикрепленных к его концу, каждый раз, когда я перезагружаю приложение, когда я хочу или ожидаю его.
flsh.axon.LetterSchedulingHandler : Sending letter 0e94035a-ec4b-4fdc-b8b6-4c0bc1927c8f...
flsh.axon.LetterSchedulingHandler : Sending letter 6b4f6966-85ea-46e0-9c49-21bcd501a1b5...
flsh.axon.LetterSchedulingHandler : Sending letter fc36292f-c7bd-4575-b56f-130624a87466...
flsh.axon.Letter : LetterScheduledEvent 0e94035a-ec4b-4fdc-b8b6-4c0bc1927c8f SCHEDULED
flsh.axon.Letter : LetterScheduledEvent 6b4f6966-85ea-46e0-9c49-21bcd501a1b5 SCHEDULED
flsh.axon.Letter : LetterScheduledEvent fc36292f-c7bd-4575-b56f-130624a87466 SCHEDULED
flsh.axon.Letter : Letter sent fc36292f-c7bd-4575-b56f-130624a87466 SENT
flsh.axon.Letter : Letter sent 0e94035a-ec4b-4fdc-b8b6-4c0bc1927c8f SENT
flsh.axon.Letter : Letter sent 6b4f6966-85ea-46e0-9c49-21bcd501a1b5 SENT
flsh.axon.Letter : Letter sent 0e94035a-ec4b-4fdc-b8b6-4c0bc1927c8f SENT
flsh.axon.Letter : Letter sent 0e94035a-ec4b-4fdc-b8b6-4c0bc1927c8f SENT
flsh.axon.Letter : Letter sent fc36292f-c7bd-4575-b56f-130624a87466 SENT
flsh.axon.Letter : Letter sent 6b4f6966-85ea-46e0-9c49-21bcd501a1b5 SENT
Мой обработчик событий выглядит так:
@Slf4j
@Component
public class LetterSchedulingHandler {
private final CommandGateway commandGateway;
public LetterSchedulingHandler(CommandGateway commandGateway) {
this.commandGateway = commandGateway;
}
@DisallowReplay //this doesn't seem to work
@EventHandler
public void handle(BeginSendLetterEvent event) {
log.info("Sending letter {}...", event.getLetterId());
commandGateway.send(new LetterSentCommand(event.getLetterId()));
}
}
@CommandHandler
public void handle(LetterSentCommand cmd) {
AggregateLifecycle.apply(new LetterSentEvent(cmd.getLetterId()));
}
Эти события публикуются с помощью планировщика ... который запускается в агрегате с помощью другого @CommandHandler
и в противном случае он успешно запускается, как и ожидалось.
@CommandHandler
public Letter(ScheduleLetterCommand cmd, EventScheduler scheduler) {
String id = cmd.getLetterId();
log.info("Received schedule command for letter id {}", id);
ScheduleToken scheduleToken = scheduler.schedule(Duration.ofSeconds(5), new BeginSendLetterEvent(id));
AggregateLifecycle.apply(new LetterScheduledEvent(id, scheduleToken));
}
Кажется, аннотация @DisallowReplay
не мешает этому. Кроме того, я попытался следовать указаниям здесь , чтобы сделать обработчик Subscribing
обработчиком событий, но либо я сделал это неправильно, либо это также не решило проблему.
axon:
axonserver:
servers: localhost
eventhandling:
processors:
LetterSchedulingHandler:
mode: subscribing