Axon:向同一聚合发送多个命令

标签 axon

如果我向同一聚合发送多个命令,则仅处理第一个命令。 这是配置问题还是我遗漏了什么? 发送第二个命令后收到的消息:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.axonframework.commandhandling.CommandExecutionException: Cannot invoke "Object.hashCode()" because "key" is null

我发送命令的服务方法是:

   public void maakAanvraag() {
        UUID aanvraagId = UUID.randomUUID();

        commandGateway.sendAndWait(
                VerwerkAanvraag.builder()
                        .aanvraagId(aanvraagId)
                        .build()
        );

        commandGateway.sendAndWait(
                VerwerkPersoonsgegevensVastgesteld.builder()
                        .aanvraagId(aanvraagId)
                        .build()
        );
        
        commandGateway.sendAndWait(
                VerwerkOrganisatiegegevensVastgesteld.builder()
                        .aanvraagId(aanvraagId)
                        .organisatieId(organisatieView.getOrganisatieId())
                        .rolOrganisatie(rolOrganisatie)
                        .build()
        );

        commandGateway.sendAndWait(
                VerwerkBeperkingErkenningsdoelGematcht.builder()
                        .aanvraagId(aanvraagId)
                        .build());
    }

我使用的聚合是:

@Aggregate
@Getter
@NoArgsConstructor
public class Aanvraag {

    public static final String META_DATA_ZAAKNUMMER = "aanvraag_zaaknummer";

    @AggregateIdentifier
    private UUID aanvraagId;

    @CommandHandler
    public Aanvraag(VerwerkAanvraag command) {
        AanvraagGeregistreerd aanvraagGeregistreerd =
                AanvraagGeregistreerd.builder()
                        .aanvraagId(command.getAanvraagId())
                        .build();

        apply(aanvraagGeregistreerd, MetaData.with(META_DATA_ZAAKNUMMER, "123456789"));
    }

    @EventSourcingHandler
    public void on(AanvraagGeregistreerd event) {
        aanvraagId = event.getAanvraagId();
    }

    @CommandHandler
    public void verwerkOrganisatiegegevensVastgesteld(VerwerkOrganisatiegegevensVastgesteld command) {
        OrganisatiegegevensVastgesteld persoonsgegevensVastgesteld =
                OrganisatiegegevensVastgesteld.builder()
                        .aanvraagId(command.getAanvraagId())
                        .build();
        apply(persoonsgegevensVastgesteld);
    }

    @EventSourcingHandler
    public void on(OrganisatiegegevensVastgesteld event) {
        aanvraagId = event.getAanvraagId();
    }

    @CommandHandler
    public void verwerkPersoonsgegevensVastgesteld(VerwerkPersoonsgegevensVastgesteld command) {
        PersoonsgegevensVastgesteld persoonsgegevensVastgesteld =
                PersoonsgegevensVastgesteld.builder()
                        .aanvraagId(command.getAanvraagId())
                        .build();
        apply(persoonsgegevensVastgesteld);
    }

    @EventSourcingHandler
    public void on(PersoonsgegevensVastgesteld event) {
        aanvraagId = event.getAanvraagId();
    }

    @CommandHandler
    public void verwerkBeperkingErkenningsdoelGematcht(VerwerkBeperkingErkenningsdoelGematcht command) {
        BeperkingErkenningsdoelGematcht beperkingErkenningsdoelGematcht =
                BeperkingErkenningsdoelGematcht.builder()
                        .aanvraagId(command.getAanvraagId())
                        .build();
        apply(beperkingErkenningsdoelGematcht);
    }

    @EventSourcingHandler
    public void on(BeperkingErkenningsdoelGematcht event) {
        aanvraagId = event.getAanvraagId();
    }
}

该项目使用 Spring Boot 2.6.6 和 axon-spring-boot-starter 4.5.9 它与 Java Temurin 17.0.3 一起运行

最佳答案

我们解决了这个问题。 问题与 Axon 无关。 问题出在日志拦截器上。

删除此日志拦截器后,Axon 按预期工作。

关于Axon:向同一聚合发送多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72571121/

相关文章:

java - 使用 Axonframework 根据特定事件从域事件条目表中检索数据

microservices - 如何在 Netflix Conductor 中向 Task 注册微服务(或其方法)?

java - 使用 EventScheduler 不会触发 Aggregate 中的事件处理程序

java - Axon - 在查询时进行投影的最简单方法

轴突框架 : Delete Aggregate Root

java - Axon 框架与 Atomikos?工作怎么样?

java - 在 Axon 中重命名聚合后如何将聚合类型更改为 "upcast"

java - CQRS 架构中的条件 `create` 命令

java - 聚合中的实体可以移动到 Axon 中的另一个聚合(相同类型)吗

java - CQRS/ES - 处理投影错误