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

当用于包装Spring集成网关调用时,HystrixCommand注释不起作用

周志文
2023-03-14

我想在Spring集成应用程序中为网关调用添加回退。

我已将对网关的调用包装在带有@HystrixCommand注释的方法中,并在fallbackMethod属性中提供了fallback方法的名称。

@HystrixCommand(fallbackMethod = "getMockData")
public String gatewayCallGetMessage(String name) {
   return serviceGateway.getMessage(name);
}

public String getMockData(String name) {
  return "mock data";
}

我还在同一个类中定义了回退方法。

我的网关界面如下,

@MessagingGateway
public interface HystrixServiceGateway {

    @Gateway(requestChannel = "get.request.channel", replyChannel = "reply.channel")
    String getMessage(String name);

}

我在classpath/pom.xml.中有sping-Cloud-starter-hystrix依赖项。此外,我在Spring Boot Application类中有@EnableHystrix注释,如下所示。

@EnableHystrix
public class HystrixIntegrationApplication {

...
}

但是,当服务关闭时,网关调用不会通过,但不会执行回退方法。

我分享了我用来重现我的问题的代码如下,https://github.com/sri420/hystrix-integration-demo

如果有人遇到过类似的问题,并且知道解决方法,请让我知道。

共有1个答案

翟理
2023-03-14

正在从同一类中的getByName调用gatewayCallGetMessage方法。不能从同一类内调用带有@HystrixCommand的方法。

正如在这个问题的答案中所讨论的,这是Spring的AOP的一个限制。

 类似资料:
  • 当我在spring aop拦截类上使用注释时,我使用了@target limit匹配方法。但调试时,会提示以下错误。 我的切入点是这样的 其中TimeIt是注释: 我把切点改成能跑了 我不太理解的是,MetricsFilter 类没有这个注释,那么为什么要生成代理呢?任何人都可以帮我吗?谢谢。

  • 我有一个简单的类叫BeaconDao 然而,当我用@service或@component标记beaconDao时,一切都运行得非常好。有人能看出问题所在吗?

  • 我尝试使用SmtpAuthenticator创建邮件服务。组件已正确启动,但用户名和密码字段中存在空值。为什么会这样?

  • 我尝试使用Spring security 3.1 但当我ROLE_USER权限 和控制程序代码

  • 根据我的理解,在methodB()中,我们使用someManager保存一个对象,并调用另一个函数callToSomeOtherServer()。所以这是上层方法中事务的一部分。如果callToSomeOtherServer()失败并抛出someException,整个事务应该回滚,保存的对象不应该在DB中反映。 但这对我不起作用,对象反映在DB中。有人能帮忙让我明白为什么它不起作用吗?