Java高级架构面试知识点整理:基于-Hystrix-线程池技术实现资源隔离

本文详细介绍了如何利用 Hystrix 的线程池技术进行资源隔离,包括使用 HystrixCommand 获取单条数据和 HystrixObservableCommand 批量获取数据。通过将服务调用封装在命令中,限制线程池资源,避免接口调用延时导致服务器资源耗尽。同时提供了异步执行的实现方式。
摘要由CSDN通过智能技术生成

怎么通过 Hystrix 线程池技术实现资源隔离?

资源隔离,就是说,你如果要把对某一个依赖服务的所有调用请求,全部隔离在同一份资源池内,不会去用其它资源了,这就叫资源隔离。哪怕对这个依赖服务,比如说商品服务,现在同时发起的调用量已经到了 1000,但是线程池内就 10 个线程,最多就只会用这 10 个线程去执行,不会说,对商品服务的请求,因为接口调用延时,将 tomcat 内部所有的线程资源全部耗尽。

Hystrix 进行资源隔离,其实是提供了一个抽象,叫做 command。这也是 Hystrix 最最基本的资源隔离技术。

一、利用 HystrixCommand 获取单条数据

我们通过将调用商品服务的操作封装在 HystrixCommand 中,限定一个 key,比如下面的 GetProductInfoCommandGroup,在这里我们可以简单认为这是一个线程池,每次调用商品服务,就只会用该线程池中的资源,不会再去用其它线程资源了。

public class GetProductInfoCommand extends HystrixCommand<ProductInfo> {
    
	private Long productId; 
	public GetProductInfoCommand(Long productId) {
    
		super(HystrixCommandGroupKey.Factory.asKey("GetProductInfoCommandGroup")); 
		this.productId = productId; 
	}
	
	@Override 
	protected ProductInfo run() {
    
		String url = "http://localhost:8081/getProductInfo?productId=" + productId;
		 
		// 调用商品服务接口 
		String response = HttpClientUtils.sendGetRequest(url); 
		return JSONObject.parseObject(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值