Hystrix 命令在 Hystrix 环境中不 运行
Hystrix command does not run in Hystrix environment
我的 Hystrix 命令有问题。如果对 hystrix 包装方法的调用来自 class,hystrix 包装方法在 Hystrix 环境
中不会 运行
在那种情况下,我将日志视为
05-02-2018 22:51:25.809 [http-nio-auto-1-exec-3] INFO c.i.q.v.e.ConnectorImpl.populateFIDSchema -
populating FID Schema
但是,如果我从 class 外部调用相同的方法,我会在 Hystrix 环境 运行 中看到它
05-02-2018 22:54:53.735 [hystrix-ConnectorImpl-1] INFO c.i.q.v.e.ConnectorImpl.populateFIDSchema -
populating FID Schema
我像这样用 HystrixCommand 包装我的方法
@HystrixCommand(commandKey = "getSchemaCommand", fallbackMethod = "getSchemaCommandFallback")
有什么想法吗?
这是Spring AOP(Hystrix-Java基于AOP)的限制。
当你在本地调用一个方法时,它不会通过代理,因此它在 Hystrix 环境中并不是真正的 运行,而是 运行 就好像它是另一个方法一样。
但是当您从 class 外部拨打电话时,它会通过代理,因此可以正常工作。
许多其他功能也是如此。另一个例子是 @Cacheable
当您从 class 外部调用时,Hystrix(Spring AOP)会拦截调用并将其包装在自己的环境中。但是当你在本地调用时,它无法拦截调用。
与@pvpkiran 的回答相反,这不是 AspectJ 的限制,而是 Spring AOP 的限制。 Spring AOP 是一种尝试通过代理实现 AspectJ 的 子集 的解决方案,而基于代理的方法是导致 建议在调用不是通过代理进行的.
有关详细信息,请参阅 Spring 框架参考中的 Spring AOP capabilities and goals and AOP Proxies。
另一方面,AspectJ 直接修改建议 class 的字节码,根本不涉及代理,并且不受基于代理的 Spring AOP 的限制。
AspectJ 在几乎所有方面都优于 Spring AOP,所以我建议您从 Spring AOP 切换到 AspectJ(您不需要放弃 Spring为此,Spring 和 AspectJ 可以很好地协同工作。
我的 Hystrix 命令有问题。如果对 hystrix 包装方法的调用来自 class,hystrix 包装方法在 Hystrix 环境
中不会 运行在那种情况下,我将日志视为
05-02-2018 22:51:25.809 [http-nio-auto-1-exec-3] INFO c.i.q.v.e.ConnectorImpl.populateFIDSchema -
populating FID Schema
但是,如果我从 class 外部调用相同的方法,我会在 Hystrix 环境 运行 中看到它
05-02-2018 22:54:53.735 [hystrix-ConnectorImpl-1] INFO c.i.q.v.e.ConnectorImpl.populateFIDSchema -
populating FID Schema
我像这样用 HystrixCommand 包装我的方法
@HystrixCommand(commandKey = "getSchemaCommand", fallbackMethod = "getSchemaCommandFallback")
有什么想法吗?
这是Spring AOP(Hystrix-Java基于AOP)的限制。
当你在本地调用一个方法时,它不会通过代理,因此它在 Hystrix 环境中并不是真正的 运行,而是 运行 就好像它是另一个方法一样。
但是当您从 class 外部拨打电话时,它会通过代理,因此可以正常工作。
许多其他功能也是如此。另一个例子是 @Cacheable
当您从 class 外部调用时,Hystrix(Spring AOP)会拦截调用并将其包装在自己的环境中。但是当你在本地调用时,它无法拦截调用。
与@pvpkiran 的回答相反,这不是 AspectJ 的限制,而是 Spring AOP 的限制。 Spring AOP 是一种尝试通过代理实现 AspectJ 的 子集 的解决方案,而基于代理的方法是导致 建议在调用不是通过代理进行的.
有关详细信息,请参阅 Spring 框架参考中的 Spring AOP capabilities and goals and AOP Proxies。
另一方面,AspectJ 直接修改建议 class 的字节码,根本不涉及代理,并且不受基于代理的 Spring AOP 的限制。
AspectJ 在几乎所有方面都优于 Spring AOP,所以我建议您从 Spring AOP 切换到 AspectJ(您不需要放弃 Spring为此,Spring 和 AspectJ 可以很好地协同工作。