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

与Hystrix的异常

万俟震博
2023-03-14

我是海斯特里克斯的新手。我正在尝试将它与Spring AOP一起使用。以下详细说明了我正在努力实现的目标。

有一个“ServiceClass”,其中注入了一些RestClient类。我用的是Spring。现在,我想将Hystrix与SpringAOP结合使用,以便可以同步或异步地从ServiceClass调用RestClient方法。

到目前为止,我所做的工作如下。

创建了一个类“我的命令”,它扩展了Hystrix命令实现了方法拦截器

在其中实现了一个方法“execute”(MethodInvocation m,String模式),如下所示:

                      protected Object execute(MethodInvocation m, String mode){
                      this.mode = mode;
                      this.method = m;
                      return execute();}

在(重写的方法)“invoke”中

                       public Object invoke(MethodInvocation m) throws throwable{
                         try{
                              execute(m,"Sync");
                         } catch(Exception e){
                             e.printStackTrace();
                         }
                        }

这个“MyCommand”被设置为spring配置文件中“ServiceClass”的AOP拦截器。

现在,问题是;在我的“主”应用程序中,当我从ClassPathXmlApplication ationContext检索“ServiceClass”并调用一个方法时,它工作正常。但是,如果我尝试调用"ServiceClass"的两个方法,它会引发以下异常:

              *java.lang.IllegalStateException: This instance can only be executed once. Please instantiate a new instance.*

代码段:

              ServiceClass srvc = (ServiceClass) ctx.getBean("proxy");
              srvc.getRequest();
              srvc.postRequest(); 

我花了将近三天的时间试图找出这个异常的原因和解决方案,但没有任何好处。请帮我把这个弄对。我错过了什么?

和往常一样,先谢谢你

共有1个答案

穆商震
2023-03-14

HystrixRE对象只能使用一次,因为它在执行后包含有用的状态信息,可用于进一步处理。例如,如果您想在调用run()超时后进行特殊处理,您可以执行以下操作:

public class MyHystrixCommand extends HystrixCommand<Object> { ... }

MyHystrixCommand command = new MyHystrixCommand();

command.execute();

if(command.isResponseTimedOut()){
    //do post processing
}

如果您可以多次调用执行(),特别是从多个线程调用,如果您的REST终结点有多个消费者,您将无法知道在查询其命令时哪个调用超时状态。

 类似资料:
  • 应用程序可以使用Spring Cloud Netflix项目提供的Hystrix断路器将这个启动器包含在项目pom.xml:spring-cloud-starter-hystrix中。Hystrix不依赖于Netflix Discovery Client。@EnableHystrix注释应放置在配置类(通常是主类)上。那么方法可以用@HystrixCommand注释来被断路器保护。有关详细信息,请

  • 我们通过直接扩展HystrixCommand类来使用Hystrix功能。但是对于某些业务异常,Hystrix的回退方法会被触发。 我不想为某些特定于业务的异常触发Hystrix回退。我如何能够实现它没有注解的基础?

  • 本文向大家介绍Spring Cloud Hystrix异常处理方法详解,包括了Spring Cloud Hystrix异常处理方法详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring Cloud Hystrix异常处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在调用服务执行HsytrixCommand实现的r

  • 我需要多次调用服务(>50次)并聚合响应。因此,我决定使用,使用Async和CustomExecuter(它自己的线程池)来提高速度,而不是等待服务响应。 我在类路径上使用带有ApacheHTTP和Hystrix的feign客户机。我可以看到它有时是工作的,有时我得到例外,因为电路是开放的。

  • 功能 NetFlix的Hystrix项目 提供对远程资源/服务的访问的最具有通用性的保护方式。 提供Fail Fast的短路保护机制(时间段内频繁出错则进入保护期,不再访问资源而直接拒绝请求) 提供并发控制 在独立线程模式下提供超时控制 记录访问延时等Metrics数据,为入口限流或自身并发控制的动态调整提供支持 为包括短路在内的各种出错情况,提供抛异常以外的备选方案,如总是返回true或empt

  • Hystrix是Netflix的一个库。 Hystrix隔离了服务之间的访问点,阻止了它们之间的级联故障并提供了后备选项。 例如,当您呼叫第三方应用程序时,发送响应需要更多时间。 所以在那个时候,控件转到了回退方法并将自定义响应返回给你的应用程序。 在本章中,您将看到如何在Spring Boot应用程序中实现Hystrix。 首先,我们需要在构建配置文件中添加Spring Cloud Starte