我们在缓存服务接口中,根据 productId 创建 command 并执行,获取到商品数据。
@RequestMapping(“/getProductInfo”)
@ResponseBody
public String getProductInfo(Long productId) {
HystrixCommand getProductInfoCommand = new GetProductInfoCommand(productId);
// 通过 command 执行,获取最新商品数据
ProductInfo productInfo = getProductInfoCommand.execute();
System.out.println(productInfo); return “success”;
}
上面执行的是 execute()
方法,其实是同步的。也可以对 command 调用 queue()
方法,它仅仅是将 command 放入线程池的一个等待队列,就立即返回,拿到一个 Future 对象,后面可以继续做其它一些事情,然后过一段时间对 Future 调用 get()
方法获取数据。这是异步的。
二、利用 HystrixObservableCommand 批量获取数据
只要是获取商品数据,全部都绑定到同一个线程池里面去,我们通过 HystrixObservableCommand
的一个线程去执行,而在这个线程里面,批量把多个 productId 的 productInfo 拉回来。
public class GetProductInfosCommand extends HystrixObservableCommand {
private String[] productIds;
public GetProductInfosCommand(String[] productIds) {
// 还是绑定在同一个线程池
super(HystrixCommandGroupKey.Factory.asKey(“GetProductInfoGroup”));
this.productIds = productIds;
}
@Override
protected Observable construct() {
return Observable.unsafeCreate((Observable.OnSubscribe) subscriber -> {
for (String productId : productIds) {
// 批量获取商品数据
String url = “http://localhost:8081/getProductInfo?productId=” + productId;
String response = HttpClientUtils.sendGetRequest(url);
ProductInfo productInfo = JSONObject.parseObject(response, ProductInfo.class);
subscriber.onNext(productInfo);
}subscriber.onCompleted();
}).subscribeOn(Schedulers.io());
}
}
在缓存服务接口中,根据传来的 id 列表,比如是以 ,分隔的 id 串,通过上面的 HystrixObservableCommand
,执行 Hystrix 的一些 API 方法,获取到所有商品数据。
public String getProductInfos(String productIds) {
String[] productIdArray = productIds.split(“,”);
HystrixObservableCommand getProductInfosCommand = new GetProductInfosCommand(productIdArray);
Observable observable = getProductInfosCommand.observe();
observable.subscribe(new Observer() {
@Override
public void onCompleted() {
System.out.println(“获取完了所有的商品数据”);
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024b 备注Java获取(资料价值较高,非无偿)
总结
在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。
[外链图片转存中…(img-kxBU7Fxm-1711561461323)]
[外链图片转存中…(img-7oyFsjFW-1711561461324)]