当前位置: 首页 > 知识库问答 >
问题:

春云hystrix CompletableFuture

蓬宾白
2023-03-14

我正在使用spring-cloud Brixton.m5进行一些工作,并尝试使AsyncRestTemplate工作,以便将多个微服务调用异步组合到协调服务响应中。我在https://github.com/spencergibb/MyFeed/blob/master/myfeed-core/src/main/java/MyFeed/core中找到了spencer Gibb的MyFeed github项目,该项目使AsyncRestTemplate与ribbon一起工作,但当我有一个用@hystrixcommand注释的方法返回CompletableFuture时,我遇到了麻烦,如下所示:

public List<Order> getCustomerOrdersFallback(int customerId) {
    return Collections.emptyList();
}

@HystrixCommand(fallbackMethod = "getCustomerOrdersFallback")
@Override
public CompletableFuture<List<Order>> getCustomerOrders(int customerId) {
    ListenableFuture<ResponseEntity<List<Order>>> ordersFuture = restTemplate.exchange(
            "http://order-service/orders?customerId={customerId}", HttpMethod.GET, null,
            new ParameterizedTypeReference<List<Order>>() {
            }, customerId);
    return CompletableFutureUtils.convert(ordersFuture);
}

调用此方法时,我会得到以下异常:

java.lang.ClassCastException: rx.internal.operators.BlockingOperatorToFuture$2 cannot be cast to java.util.concurrent.CompletableFuture
at com.sun.proxy.$Proxy86.getCustomerOrders(Unknown Source) ~[na:na]
at com.build.coordination.service.CustomerServiceImpl.getCustomerOrderView(CustomerServiceImpl.java:50) ~[classes/:na]
at com.build.coordination.customer.CustomerController.getCustomerOrderView(CustomerController.java:45) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_72-internal]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_72-internal]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_72-internal]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_72-internal]

如果我从getCustomerOrders中删除@HystrixCommand注释,调用工作正常,但当然会失去hystrix功能。

共有1个答案

有翰海
2023-03-14

我最终从使用CompletableFuture切换到了由Hystrix/Javanica支持的rx.observable。

 类似资料:
  • Spring Cloud Kafka Streams与Spring Cloud Stream、Spring Cloud Function、Spring AMQP和Spring for Apache Kafka有什么区别?

  • 我的一些微服务使用log4j2作为记录器。Spring cloud Sleuth支持logback。在这个场景中,我如何使用Sleuth来获得分布式跟踪。我明白用log4j2使用sleuth,我必须实现某些类。我试过了,但没有运气。请帮忙

  • 我是SpringBoot(云)的新手,将从事一个新项目 我们的项目架构师设计了这样的新应用程序: 一个带有Angulle-2的前端Spring Boot应用程序(也是微服务)。 一个尤里卡服务器,其他微服务将连接到该服务器。 ZUUL代理服务器,它将连接到前端和镜像服务。 我需要单独的ZUUL代理服务器吗?我的意思是,使用与ZUUL服务器相同的前端应用程序的利弊是什么 MicorService-1

  • 我用的是Apache Kafka 2.7.0和Spring Cloud Stream Kafka Streams。 在我的Spring Cloud Stream (Kafka Streams)应用程序中,我已经将我的application.yml配置为当输入主题中的消息出现反序列化错误时使用sendToDlq机制: 我启动了我的应用程序,但我看不到这个主题存在。文档指出,如果 DLQ 主题不存在,

  • 如何提供一个在条件不匹配时调用的处理程序? 如果我有两个处理程序,第一个有条件,第二个没有条件,当第一个条件匹配时,两个处理程序都被调用。我如何避免这种情况?

  • 我有一个关于基于Spring Cloud Netflix(Zuul、Eureka)、Spring Security OAuth和Spring Cloud Security的微服务生态系统之间安全下游调用的问题。 例如,我有WEB应用程序(WEB)和以下微服务:A、B、X、Y、Z。 null null 而我想解决以下问题(困惑的副手问题): 服务A应该不能对服务Z执行任何操作(即使经过身份验证的用户