在 Axon + 分布式命令总线 + eureka 中创建命令处理程序 bean post 处理器时出错

Error creating Command handler bean post processor in Axon + distributed command bus + eureka

我正在尝试使用 Eureka 将 axon 从 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 启动应用程序中使用的依赖项是

<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 移动,但无济于事。 如有任何帮助,我们将不胜感激。

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

__axon-annotation-command-handler-bean-post-processor 是一个 Bean Post Processor Axon Framework 引入能够正确注册您可能已在应用程序中设置的所有命令处理程序。

然而,根据您使用的 Axon Framework 的版本,这可能会有不同的处理方式。

如果您使用的是 Axon 3.x 应用程序,您可能会利用 @EnableAxon 注释来 auto-configure 所有 Axon 的优点。 但是,当您 使用 axon-spring-boot-starter 依赖项来进行 Spring 类似自动配置的引导时,您 不需要 使用 @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。这背后的原因是核心和这些 'extensions'.

有独立的发布周期

如果您想使用兼容 Axon 4 的 Spring Cloud CommandBus,建议改用 Axon Spring Cloud Extension

我假设只要您切换依赖项,问题就会得到解决。