hystrix javanica崩溃器不起作用

时间:2018-07-03 02:01:47

标签: java spring-boot hystrix

我在春季引导中使用hystrix javanica折叠器,但发现它不起作用,我的代码如下:

服务类别:

public class TestService {

    @HystrixCollapser(batchMethod = "getStrList")
    public Future<String> getStr(String id) {
         System.out.println("single");
         return null;
     }

     @HystrixCommand
     public List<String> getStrList(List<String> ids) {
         System.out.println("batch,size=" + ids.size());

         List<String> strList = Lists.newArrayList();
         ids.forEach(id -> strList.add("test"));
         return strList;
     }
 }

我使用的地方:

    public static void main(String[] args) {
          TestService testService = new TestService();

          HystrixRequestContext context = HystrixRequestContext.initializeContext();

          Future<String> f1= testService.getStr("111");
          Future<String> f2= testService.getStr("222");

          try {
              Thread.sleep(3000);
              System.out.println(f1.get()); // nothing printed
              System.out.println(f2.get()); // nothing printed
          } catch (Exception e) {
          }

          context.shutdown();
      }

它打印了3 single,而不是1 batch

我想知道我的代码出了什么问题,一个有效的例子更好。

1 个答案:

答案 0 :(得分:1)

我在互联网上找不到hystrix javanica示例,因此我必须阅读源代码来解决此问题,现在已经解决了,这是我的摘要:

在spring-boot中使用hystrix(javanica)折叠器时,您必须:

  1. 定义了一个function PageKey() { var val = "some value" // document.getElementById('demo').value fun3(val); // pass value to fun3 } function fun3(appData) { console.log(appData); } PageKey()春豆并导入hystrixAspect;
  2. hystrix-strategy.xml注释单个方法,用@Hystrix Collapser注释批处理方法;
  3. 使单个方法需要1个参数(ArgType)返回Future,批处理方法需要List返回List并确保args的大小等于return的大小。
  4. 设置hystrix属性@HystrixCommand,如果要折叠来自多个用户线程的请求,必须将范围设置为GLOBAL;
  5. 在提交单个请求之前,必须使用batchMethod, scope初始化hystrix上下文,并在请求完成时使用HystrixRequestContext.initializeContext()初始化上下文;