Java @缺少HystrixCollapser批量方法

Java @缺少HystrixCollapser批量方法,java,hystrix,Java,Hystrix,我只是想做一个关于Hystrix的折叠器的演示,但为什么我会有这样的例外呢 Caused by: java.lang.IllegalStateException: batch method is absent: getUserByIds 我只是使用@HystrixCollapser注释来测试我的代码,但我无法成功地获得它。 代码如下所示: @Override @CacheResult(cacheKeyMethod = "getCacheKey") @Hy

我只是想做一个关于Hystrix的折叠器的演示,但为什么我会有这样的例外呢

Caused by: java.lang.IllegalStateException: batch method is absent: getUserByIds
我只是使用@HystrixCollapser注释来测试我的代码,但我无法成功地获得它。 代码如下所示:

  @Override
    @CacheResult(cacheKeyMethod = "getCacheKey")
    @HystrixCommand(fallbackMethod = "getDefaultUser", commandKey = "getUserCache")
    public CommonResult getUserCache(Long id) {
        LOGGER.info("getUserCache id:{}", id);
        return restTemplate.getForObject(userServiceUrl + "/user/{1}", CommonResult.class, id);
    }

    @Override
    @HystrixCollapser(batchMethod = "getUserByIds", collapserProperties = {
            @HystrixProperty(name = "timerDelayInMilliseconds", value = "100")})
    public Future<User> getUserFuture(Long id) {
        return new AsyncResult<User>() {
            @Override
            public User invoke() {
                CommonResult commonResult = restTemplate.getForObject(userServiceUrl + "/user/{1}", CommonResult.class,id);
                Map data = (Map) commonResult.getData();
                User user = BeanUtil.mapToBean(data, User.class, true);
                LOGGER.info("getUserByIds username{}", user.getUsername());
                return user;
            }
        };
    }
@覆盖
@CacheResult(cacheKeyMethod=“getCacheKey”)
@HystrixCommand(fallbackMethod=“getDefaultUser”,commandKey=“getUserCache”)
公共CommonResult getUserCache(长id){
info(“getUserCache id:{}”,id);
返回restemplate.getForObject(userServiceUrl+“/user/{1}”,CommonResult.class,id);
}
@凌驾
@HystrixCollapser(batchMethod=“getUserByIds”,collapserProperties={
@HystrixProperty(name=“timerdelayinmillizes”,value=“100”)}
公共未来getUserFuture(长id){
返回新的AsyncResult(){
@凌驾
公共用户调用(){
CommonResult CommonResult=restTemplate.getForObject(userServiceUrl+“/user/{1}”,CommonResult.class,id);
映射数据=(映射)commonResult.getData();
User User=BeanUtil.mapToBean(数据,User.class,true);
info(“getUserByIds username{}”,user.getUsername());
返回用户;
}
};
}
我得到:

Caused by: java.lang.IllegalStateException: batch method is absent: getUserByIds
    at com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect$CollapserMetaHolderFactory.create(HystrixCommandAspect.java:194) ~[hystrix-javanica-1.5.18.jar:1.5.18]
    at com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect$MetaHolderFactory.create(HystrixCommandAspect.java:166) ~[hystrix-javanica-1.5.18.jar:1.5.18]
    at com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect.methodsAnnotatedWithHystrixCommand(HystrixCommandAspect.java:93) ~[hystrix-javanica-1.5.18.jar:1.5.18]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_231]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_231]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_231]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_231]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at com.changsheng.hystrix.service.UserServiceImpl$$EnhancerBySpringCGLIB$$306294d2.getUserFuture(<generated>) ~[classes/:na]
    at com.changsheng.hystrix.controller.UserHystrixController.testCollapser(UserHystrixController.java:50) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_231]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_231]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_231]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_231]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    ... 40 common frames omitted

原因:java.lang.IllegalStateException:缺少批处理方法:GetUserById
在com.netflix.hystrix.contrib.javanica.aop.aspectj.hystrixcommandspect$CollapserMetaHolderFactory.create(hystrixcommandspect.java:194)~[hystrix-javanica-1.5.18.jar:1.5.18]
在com.netflix.hystrix.contrib.javanica.aop.aspectj.hystrixcommandspect$MetaHolderFactory.create(hystrixcommandspect.java:166)~[hystrix-javanica-1.5.18.jar:1.5.18]
在com.netflix.hystrix.contrib.javanica.aop.aspectj.hystrixcommandspect.methodsannotated with hystrixcommand(hystrixcommandspect.java:93)~[hystrix-javanica-1.5.18.jar:1.5.18]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0\u 231]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0\u 231]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0\u 231]
在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0\u 231]
在org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:175)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.procedue(CglibAopProxy.java:749)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:186)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.procedue(CglibAopProxy.java:749)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在com.hangsheng.hystrix.service.UserServiceImpl$$EnhancerBySpringCGLIB$$306294d2.getUserFuture()~[classes/:na]
在com.hangsheng.hystrix.controller.UserHystrixController.testCollapser(UserHystrixController.java:50)~[classes/:na]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0\u 231]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0\u 231]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0\u 231]
在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0\u 231]
在org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.web.servlet.mvc.method.annotation.ServletinInvocableHandlerMethod.invokeAndHandle(ServletinInvocableHandlerMethod.java:105)~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
... 省略40个公共帧
有人能帮我吗