我在春季引导中使用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
。
我想知道我的代码出了什么问题,一个有效的例子更好。
答案 0 :(得分:1)
我在互联网上找不到hystrix javanica示例,因此我必须阅读源代码来解决此问题,现在已经解决了,这是我的摘要:
在spring-boot中使用hystrix(javanica)折叠器时,您必须:
function PageKey() {
var val = "some value" // document.getElementById('demo').value
fun3(val); // pass value to fun3
}
function fun3(appData) {
console.log(appData);
}
PageKey()
春豆并导入hystrixAspect
; hystrix-strategy.xml
注释单个方法,用@Hystrix Collapser
注释批处理方法; @HystrixCommand
,如果要折叠来自多个用户线程的请求,必须将范围设置为GLOBAL; batchMethod, scope
初始化hystrix上下文,并在请求完成时使用HystrixRequestContext.initializeContext()
初始化上下文;