【问题标题】:Error creating Command handler bean post processor in Axon + distributed command bus + eureka在 Axon + 分布式命令总线 + eureka 中创建命令处理程序 bean 后处理器时出错
【发布时间】:2019-07-17 15:36:07
【问题描述】:

我正在尝试使用 Eureka 将轴突从 SimpleCommandBus 移动到 DistributedCommandBus 以进行服务发现。

我尝试通过阅读 axon (https://docs.axoniq.io/reference-guide/extensions/spring-cloud) 下提供的文档来实现这一点

当我尝试启动我的应用程序时,我收到一条错误消息

创建名为“__axon-annotation-command-handler-bean-post-processor”的 bean 时出错:bean 初始化失败;嵌套异常是 java.lang.reflect.MalformedParameterizedTypeException

这就是我连接分布式命令总线的方式:

    public CommandRouter springCloudCommandRouter(DiscoveryClient discoveryClient, Registration localServiceInstance) {
        return SpringCloudCommandRouter.builder()
                .discoveryClient(discoveryClient)
                .routingStrategy(new AnnotationRoutingStrategy(STATIC_KEY))
                .localServiceInstance(localServiceInstance)
                .build();
    }

    @Bean
    public CommandBusConnector springHttpCommandBusConnector(
            @Qualifier("localSegment") CommandBus localSegment,
            RestOperations restOperations,
            Serializer serializer) {
        return SpringHttpCommandBusConnector.builder()
                .localCommandBus(localSegment)
                .restOperations(restOperations)
                .serializer(serializer)
                .build();
    }

    @Primary
    @Bean
    public DistributedCommandBus springCloudDistributedCommandBus(
            CommandRouter commandRouter,
            CommandBusConnector commandBusConnector) {
        return DistributedCommandBus.builder()
                .commandRouter(commandRouter)
                .connector(commandBusConnector)
                .build();
    }



After starting my application with this, I'm receiving the following error message.

2019-07-04T14:02:39.079+05:30 [APP/PROC/WEB/0] [OUT] 2019-07-04 08:32:39.079 WARN 17 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '__axon-annotation-command-handler-bean-post-processor': Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
2019-07-04T14:02:39.100+05:30 [APP/PROC/WEB/0] [OUT] Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-07-04T14:02:39.100+05:30 [APP/PROC/WEB/0] [OUT] 2019-07-04 08:32:39.099 INFO 17 --- [ main] ConditionEvaluationReportLoggingListener :
2019-07-04T14:02:39.106+05:30 [APP/PROC/WEB/0] [OUT] 2019-07-04 08:32:39.106 ERROR 17 --- [ main] o.s.boot.SpringApplication : Application run failed
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] ... 23 common frames omitted
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:572)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1331)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1471)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1491)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.BeanWrapperImpl.getPropertyDescriptors(BeanWrapperImpl.java:248)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.BeanWrapperImpl.getCachedIntrospectionResults(BeanWrapperImpl.java:174)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:177)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:294)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.CachedIntrospectionResults.buildGenericTypeAwarePropertyDescriptor(CachedIntrospectionResults.java:359)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.GenericTypeAwarePropertyDescriptor.<init>(GenericTypeAwarePropertyDescriptor.java:106)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.core.GenericTypeResolver.resolveParameterType(GenericTypeResolver.java:61)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.core.ResolvableType.resolveMethodParameter(ResolvableType.java:1297)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.core.ResolvableType.as(ResolvableType.java:443)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.core.ResolvableType.getSuperType(ResolvableType.java:453)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at java.lang.Class.getGenericSuperclass(Class.java:777)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.repository.ClassRepository.getSuperclass(ClassRepository.java:90)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:92)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:51)
2019-07-04T14:02:39.107+05:30 [APP/PROC/WEB/0] [OUT] at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:58)

我们在 Spring Boot 应用程序中使用的依赖项如下

<spring-boot.version>2.0.6.RELEASE</spring-boot.version>
<spring.cloud.version>Finchley.RELEASE</spring.cloud.version>
<axon.version>4.0</axon.version>
<axon-spring-boot-starter.version>${axon.version}</axon-spring-boot-starter.version>
 <axon-springcloud.version>4.0</axon-springcloud.version>
 <axon-distributed-commandbus-springcloud.version>3.4.3</axon-distributed-commandbus-springcloud.version>

更新: 我们尝试将我们的 axon 版本升级到 4.1.2,我们现在遇到了 404 错误。下面的堆栈跟踪:

2019-07-17 07:02:48.815 DEBUG [test-app,65da6028861139c5,150e2f6a196c6ce8,false] 19 --- [http-nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Written [{timestamp=Wed Jul 17 07:02:48 UTC 2019, status=404, error=Not Found, message=No message available, path=/spring-command-bus-connector/command}]

我们也尝试从 SpringCloudCommandRouter -> SpringCloudHttpBackupCommandRouter 移动命令路由器,但无济于事。 对此的任何帮助将不胜感激。

【问题讨论】:

    标签: spring-boot axon


    【解决方案1】:

    希望我能帮助您解决您遇到的问题。

    __axon-annotation-command-handler-bean-post-processor 是一个 Bean 后处理器 Axon 框架,它引入了能够正确注册您可能在应用程序中设置的所有命令处理程序。

    但是,根据您使用的 Axon Framework 的版本,这可能会有所不同。

    如果您使用的是 Axon 3.x 应用程序,您可能会利用 @EnableAxon 注释为您自动配置所有 Axon 细节。 但是,当您使用 axon-spring-boot-starter 依赖项来进行类似 Spring Boot 的自动配置时,您不需要使用 @EnableAxon。在这种情况下,实际上建议不要同时使用两者。

    为了更清楚地说明这一点,Axon 4 完全放弃了@EnableAxon 的概念。

    当然,当您链接到 Axon 3.x 参考指南页面时,我正在分享此信息,因此我假设您使用的是 Axon 3。如果是这种情况,我建议您使用 @EnableAxonaxon-spring-boot-starter 依赖。

    如果您使用的是其他版本的 Axon,我想请您更新问题以指定框架和 Spring 的版本,以及任何其他可能有助于我们解决手头问题的重要配置指针。

    最后,我希望这对您有所帮助 @Anish!


    更新

    我想我知道您遇到@Anish 的问题是什么。 您正在使用 Axon Framework 4.0(顺便说一下,您可以更新到 4.1.2,很确定这样做没有任何痛苦),但您仍在使用 Axon Framework 3.4.3 的axon-distributed-commandbus-springcloud

    当 Axon Framework 从版本 3.x 迁移到 4.x 时,一些模块已从核心存储库中删除。 axon-amqpaxon-mongo 等模块,还有axon-distributed-commandbus-springcloud。这背后的原因是核心和这些“扩展”具有独立的发布周期。

    如果您想使用符合 Axon 4 的 Spring Cloud CommandBus,建议改为拉入 Axon Spring Cloud Extension

    我认为,只要您切换该依赖项,问题就会得到解决。

    【讨论】:

    • 对于我之前附加的混淆 w.r.t 文档链接表示歉意。我现在更新了链接,还添加了我们在应用程序中使用的依赖项的详细信息。我们也尝试迁移到 axon 4.1,但我们遇到了同样的接线问题。
    • 我们现在已经尝试将我们的 axon 版本升级到 4.1.2,但这次我们遇到了不同的错误。我已经更新了上面的原始问题。
    • @Anish 我对问题更新的意图是指出您应该使用 axon-springcloud-spring-boot-starter 而不是 axon-distributed-commandbus-springcloud 依赖项。前者是 Axon Extensions 组的一部分,而后者是 Axon Framework Core 3.x 的一部分。
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多