首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Hystrix环境中不运行Hystrix命令。

在Hystrix环境中不运行Hystrix命令。
EN

Stack Overflow用户
提问于 2018-02-05 17:27:43
回答 2查看 1.4K关注 0票数 4

我的Hystrix命令有问题。如果对hystrix包装方法的调用来自类内,则Hystrix包装方法不会在Hystrix环境中运行。

在这种情况下,我将日志视为

代码语言:javascript
复制
05-02-2018 22:51:25.809 [http-nio-auto-1-exec-3] INFO  c.i.q.v.e.ConnectorImpl.populateFIDSchema -
    populating FID Schema

但是,如果我从类外部调用相同的方法,我会看到它在Hystrix环境中运行。

代码语言:javascript
复制
 05-02-2018 22:54:53.735 [hystrix-ConnectorImpl-1] INFO  c.i.q.v.e.ConnectorImpl.populateFIDSchema -
    populating FID Schema

我正在像这样用HystrixCommand包装我的方法

代码语言:javascript
复制
 @HystrixCommand(commandKey = "getSchemaCommand", fallbackMethod = "getSchemaCommandFallback")

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-06 17:19:28

与@pvpkiran的回答相反,这不是AspectJ的限制,而是Spring的限制。Spring是一种通过代理实现AspectJ子集的解决方案,而基于代理的方法是在不通过代理进行调用时不调用建议的原因。

有关更多细节,请参见Spring参考中的Spring功能和目标AOP代理

另一方面,AspectJ直接修改建议类的字节码,根本不涉及代理,也不受基于代理的Spring的限制。

AspectJ在几乎所有方面都优于Spring,所以我建议您从Spring切换到AspectJ (您不需要为此抛弃Spring,因为Spring和AspectJ可以很好地协同工作)。

票数 2
EN

Stack Overflow用户

发布于 2018-02-05 17:35:31

这是Spring的一个限制(Hystrix基于AOP)。

当您在本地调用一个方法时,它不会通过代理,因此它不会在Hystrix环境中真正运行,而是像运行另一种方法一样运行。

但是,当您从类之外发出一个调用时,它会通过代理进行,因此它可以工作。

许多其他功能也是如此。另一个例子是@Cacheable

当您从类外部调用时,Hystrix (Spring )拦截该调用并将其包装在自己的环境中。但是,当您在本地进行呼叫时,它无法拦截该呼叫。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48628164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档