Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 没有为命令订阅任何处理程序。轴突3.3_Spring Boot_Cqrs_Axon - Fatal编程技术网

Spring boot 没有为命令订阅任何处理程序。轴突3.3

Spring boot 没有为命令订阅任何处理程序。轴突3.3,spring-boot,cqrs,axon,Spring Boot,Cqrs,Axon,我正试图通过教程创建基本的Axon/Spring应用程序,但遇到了一个奇怪的错误,如:NoHandlerForCommandException:命令未订阅任何处理程序。Axon似乎看不到@CommandHandler注释 这是我的文件: 聚合 @Aggregate @NoArgsConstructor public class Account { @AggregateIdentifier private UUID accountId; private Double ba

我正试图通过教程创建基本的Axon/Spring应用程序,但遇到了一个奇怪的错误,如:NoHandlerForCommandException:命令未订阅任何处理程序。Axon似乎看不到@CommandHandler注释

这是我的文件:

聚合

@Aggregate
@NoArgsConstructor
public class Account {

    @AggregateIdentifier
    private UUID accountId;
    private Double balance;

    @CommandHandler
    public Account(CreateAccountCommand command) {
        apply(new AccountCreatedEvent(command.getAccountId(), command.getName()));
    }

    @EventSourcingHandler
    protected void on(AccountCreatedEvent event) {
        this.accountId = event.getAccountId();
        this.balance = 0.0;
    } 
}
事件

命令

@Getter
public class CreateAccountCommand {

    @TargetAggregateIdentifier
    private UUID accountId;
    private String name;

    public CreateAccountCommand(UUID accountId, String name) {
        this.accountId = accountId;
        this.name = name;
    }
}
弹簧靴形态

@SpringBootApplication
public class App {

    @Configuration
    public static class TestConfiguration {
        @Bean
        public EventStorageEngine inMemoryEventStorageEngine() {
            return new InMemoryEventStorageEngine();
        }
    }

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
这就是我发送命令的方式

@Component
public class AppLoader {

    @Autowired
    private CommandGateway cmdGateway;

    @PostConstruct
    public void init() {
        cmdGateway.send(new CreateAccountCommand(UUID.randomUUID(), "test"));
    }
}
我的身材,格雷德尔

buildscript {
    ext {
        springBootVersion = '2.0.5.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'io.yourpoint.nettnews'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'org.axonframework', name: 'axon-test', version: '3.3.5'
    compile group: 'org.axonframework', name: 'axon-spring-boot-starter', version: '3.3.5'
    compile('org.springframework.boot:spring-boot-starter-webflux')
    compileOnly('org.projectlombok:lombok')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('io.projectreactor:reactor-test')
}

@PostConstruct
中执行
CommandGateway#send()
调用很可能对Axon来说太早了

目前,所有的命令、事件和查询处理程序通常在所有bean初始化之后注册。 将
CommandGateway#send()
移动到REST端点后面应该会给您足够大的时间来确保所有处理程序都已注册

所以简而言之,这是一个时间问题,为什么您会得到
NoHandlerForCommandException

我们(在AxonIQ)看到了在所有处理程序注册后立即发送某种应用程序事件的好处。但这是未来的事情

希望这对你有所帮助@Benjamin

buildscript {
    ext {
        springBootVersion = '2.0.5.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'io.yourpoint.nettnews'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'org.axonframework', name: 'axon-test', version: '3.3.5'
    compile group: 'org.axonframework', name: 'axon-spring-boot-starter', version: '3.3.5'
    compile('org.springframework.boot:spring-boot-starter-webflux')
    compileOnly('org.projectlombok:lombok')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('io.projectreactor:reactor-test')
}