hystrix javanica 崩溃器没有工作
hystrix javanica collapser did not work
我在 spring 引导中使用 hystrix javanica collaper,但我发现它不起作用,我的代码如下所示:
服务class:
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
。
我想知道我的代码有什么问题,一个有效的例子更好。
网上找不到hystrix javanica的示例,只好阅读源码来解决这个问题,现在已经解决了,这是我的总结:
当你在 spring-boot 中使用 hystrix(javanica) collaper 时,你必须:
- 定义了一个
hystrixAspect
spring bean 并导入 hystrix-strategy.xml
;
- 用
@Hystrix Collapser
注释单一方法用@HystrixCommand
注释批方法;
- 使您的单一方法需要 1 个参数(ArgType)return Future,批处理方法需要 List return List 并确保 args 的大小等于 return 的大小。
- 设置hystrix属性
batchMethod, scope
,如果要折叠来自多个用户线程的请求,必须将作用域设置为GLOBAL;
- 在提交单个请求之前,必须使用
HystrixRequestContext.initializeContext()
初始化 hystrix 上下文,并在请求完成时使用 shutdown
上下文;
我在 spring 引导中使用 hystrix javanica collaper,但我发现它不起作用,我的代码如下所示:
服务class:
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
。
我想知道我的代码有什么问题,一个有效的例子更好。
网上找不到hystrix javanica的示例,只好阅读源码来解决这个问题,现在已经解决了,这是我的总结:
当你在 spring-boot 中使用 hystrix(javanica) collaper 时,你必须:
- 定义了一个
hystrixAspect
spring bean 并导入hystrix-strategy.xml
; - 用
@Hystrix Collapser
注释单一方法用@HystrixCommand
注释批方法; - 使您的单一方法需要 1 个参数(ArgType)return Future,批处理方法需要 List return List 并确保 args 的大小等于 return 的大小。
- 设置hystrix属性
batchMethod, scope
,如果要折叠来自多个用户线程的请求,必须将作用域设置为GLOBAL; - 在提交单个请求之前,必须使用
HystrixRequestContext.initializeContext()
初始化 hystrix 上下文,并在请求完成时使用shutdown
上下文;