Anonymous
Запрос о стойкости и проверке статуса завершения проекции
Сообщение
Anonymous » 07 июл 2025, 08:04
Есть ли способ, которым я могу каким-то образом проверить статус проекции для приложения Pekko/Spring Boot, так как я хочу запустить следующее событие только после того, как одна проекция дает статус OK.
Код: Выделить всё
private CommandHandlerWithReplyBuilderByState onEmpty() {
return newCommandHandlerWithReplyBuilder()
.forState(State::isEmpty)
.onCommand(Create.class, (state, cmd) -> {
if(cmd.isInitialAutoStart()) {
List events = new ArrayList();
events.add(new CampaignCreated(cmd.getCampaignId(),
OffsetDateTime.now(ZoneOffset.UTC), cmd.getName(),
cmd.getDomainGroupId(), cmd.getDomainIdWithCount(), cmd.getContactListId(),
cmd.getContactSegmentId(), cmd.getRouteId(),
cmd.getOfferId(), cmd.getVertical(),
cmd.getContactSkipOffset(), cmd.getSendSpeed(),
cmd.getCampaignOptimization(), cmd.getDataTriggers(),
cmd.getDegreeOfParallelism(), cmd.getContactFilter(),
cmd.getMessageTemplate(), cmd.getMessageTemplateId(),
cmd.getSaveProgressEvery(), cmd.isInitialAutoStart(), cmd.getCampaignScheduledTime(), cmd.getStartOption(),
cmd.getScheduleChronExpression(),
cmd.getWebHooks(), cmd.getSliceSize(), cmd.getNetworkCarrierFilter()));
events.add(new CampaignResuming(cmd.getCampaignId(), OffsetDateTime.now(ZoneOffset.UTC), 0));
return Effect()
.persist(events)
.thenRun(newState -> {
this.campaignRunner = spawnCampaignRunner(newState, this.context,
this.campaignService, this.outboundCampaignMessageService, this.contactService, this.suppressedContactService,
this.leadService, this.domainGroupService, this.domainService, this.offerService,
this.routeService, this.clickService, this.webClientBuilder);
})
.thenReply(cmd.getReplyTo(), newState -> StatusReply.ack());
}
return Effect().persist(new CampaignCreated(cmd.getCampaignId(),
OffsetDateTime.now(ZoneOffset.UTC), cmd.getName(),
cmd.getDomainGroupId(),cmd.getDomainIdWithCount(), cmd.getContactListId(),
cmd.getContactSegmentId(), cmd.getRouteId(),
cmd.getOfferId(), cmd.getVertical(),
cmd.getContactSkipOffset(), cmd.getSendSpeed(),
cmd.getCampaignOptimization(), cmd.getDataTriggers(),
cmd.getDegreeOfParallelism(), cmd.getContactFilter(),
cmd.getMessageTemplate(), cmd.getMessageTemplateId(),
cmd.getSaveProgressEvery(), false, cmd.getCampaignScheduledTime(), cmd.getStartOption(),
cmd.getScheduleChronExpression(),
cmd.getWebHooks(), cmd.getSliceSize(), cmd.getNetworkCarrierFilter()))
.thenReply(cmd.getReplyTo(), newState -> StatusReply.ack());
})
.onCommand(Edit.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists.")))
.onCommand(Pause.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists.")))
.onCommand(ProcessCompleted.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists.")))
.onCommand(ProcessFailed.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists.")))
.onCommand(Resume.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists.")))
.onCommand(ProcessSaveProgress.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists.")))
.onCommand(ProcessRunning.class, (state, cmd) -> Effect().none().thenNoReply())
.onCommand(ProcessPaused.class, (state, cmd) -> Effect().none().thenNoReply())
.onCommand(AddCustomRevenue.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists.")));
}
Здесь я хочу подождать, пока Campaine Craited будет настойчивой, и прогноз будет завершена, только тогда я хочу возобновить кампанию и Spawn Campaignner.>
Подробнее здесь:
https://stackoverflow.com/questions/796 ... atus-check
1751864675
Anonymous
Есть ли способ, которым я могу каким-то образом проверить статус проекции для приложения Pekko/Spring Boot, так как я хочу запустить следующее событие только после того, как одна проекция дает статус OK.[code]private CommandHandlerWithReplyBuilderByState onEmpty() { return newCommandHandlerWithReplyBuilder() .forState(State::isEmpty) .onCommand(Create.class, (state, cmd) -> { if(cmd.isInitialAutoStart()) { List events = new ArrayList(); events.add(new CampaignCreated(cmd.getCampaignId(), OffsetDateTime.now(ZoneOffset.UTC), cmd.getName(), cmd.getDomainGroupId(), cmd.getDomainIdWithCount(), cmd.getContactListId(), cmd.getContactSegmentId(), cmd.getRouteId(), cmd.getOfferId(), cmd.getVertical(), cmd.getContactSkipOffset(), cmd.getSendSpeed(), cmd.getCampaignOptimization(), cmd.getDataTriggers(), cmd.getDegreeOfParallelism(), cmd.getContactFilter(), cmd.getMessageTemplate(), cmd.getMessageTemplateId(), cmd.getSaveProgressEvery(), cmd.isInitialAutoStart(), cmd.getCampaignScheduledTime(), cmd.getStartOption(), cmd.getScheduleChronExpression(), cmd.getWebHooks(), cmd.getSliceSize(), cmd.getNetworkCarrierFilter())); events.add(new CampaignResuming(cmd.getCampaignId(), OffsetDateTime.now(ZoneOffset.UTC), 0)); return Effect() .persist(events) .thenRun(newState -> { this.campaignRunner = spawnCampaignRunner(newState, this.context, this.campaignService, this.outboundCampaignMessageService, this.contactService, this.suppressedContactService, this.leadService, this.domainGroupService, this.domainService, this.offerService, this.routeService, this.clickService, this.webClientBuilder); }) .thenReply(cmd.getReplyTo(), newState -> StatusReply.ack()); } return Effect().persist(new CampaignCreated(cmd.getCampaignId(), OffsetDateTime.now(ZoneOffset.UTC), cmd.getName(), cmd.getDomainGroupId(),cmd.getDomainIdWithCount(), cmd.getContactListId(), cmd.getContactSegmentId(), cmd.getRouteId(), cmd.getOfferId(), cmd.getVertical(), cmd.getContactSkipOffset(), cmd.getSendSpeed(), cmd.getCampaignOptimization(), cmd.getDataTriggers(), cmd.getDegreeOfParallelism(), cmd.getContactFilter(), cmd.getMessageTemplate(), cmd.getMessageTemplateId(), cmd.getSaveProgressEvery(), false, cmd.getCampaignScheduledTime(), cmd.getStartOption(), cmd.getScheduleChronExpression(), cmd.getWebHooks(), cmd.getSliceSize(), cmd.getNetworkCarrierFilter())) .thenReply(cmd.getReplyTo(), newState -> StatusReply.ack()); }) .onCommand(Edit.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists."))) .onCommand(Pause.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists."))) .onCommand(ProcessCompleted.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists."))) .onCommand(ProcessFailed.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists."))) .onCommand(Resume.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists."))) .onCommand(ProcessSaveProgress.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists."))) .onCommand(ProcessRunning.class, (state, cmd) -> Effect().none().thenNoReply()) .onCommand(ProcessPaused.class, (state, cmd) -> Effect().none().thenNoReply()) .onCommand(AddCustomRevenue.class, (state, cmd) -> Effect().reply(cmd.getReplyTo(), StatusReply.error("Campaign doesn't exists."))); } [/code] Здесь я хочу подождать, пока Campaine Craited будет настойчивой, и прогноз будет завершена, только тогда я хочу возобновить кампанию и Spawn Campaignner.> Подробнее здесь: [url]https://stackoverflow.com/questions/79689706/query-regarding-event-persistence-and-projection-completion-status-check[/url]