我的Hystrix命令有问题。如果对hystrix包装方法的调用来自类内,则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但是,如果我从类外部调用相同的方法,我会看到它在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")有什么想法吗?
发布于 2018-02-06 17:19:28
与@pvpkiran的回答相反,这不是AspectJ的限制,而是Spring的限制。Spring是一种通过代理实现AspectJ子集的解决方案,而基于代理的方法是在不通过代理进行调用时不调用建议的原因。
有关更多细节,请参见Spring参考中的Spring功能和目标和AOP代理。
另一方面,AspectJ直接修改建议类的字节码,根本不涉及代理,也不受基于代理的Spring的限制。
AspectJ在几乎所有方面都优于Spring,所以我建议您从Spring切换到AspectJ (您不需要为此抛弃Spring,因为Spring和AspectJ可以很好地协同工作)。
发布于 2018-02-05 17:35:31
这是Spring的一个限制(Hystrix基于AOP)。
当您在本地调用一个方法时,它不会通过代理,因此它不会在Hystrix环境中真正运行,而是像运行另一种方法一样运行。
但是,当您从类之外发出一个调用时,它会通过代理进行,因此它可以工作。
许多其他功能也是如此。另一个例子是@Cacheable
当您从类外部调用时,Hystrix (Spring )拦截该调用并将其包装在自己的环境中。但是,当您在本地进行呼叫时,它无法拦截该呼叫。
https://stackoverflow.com/questions/48628164
复制相似问题