您的位置:首页 > 文旅 > 美景 > Spring Cloud 常用组件——Hystrix(下)

Spring Cloud 常用组件——Hystrix(下)

2024/10/7 0:17:59 来源:https://blog.csdn.net/YeJingLiangZuo/article/details/139939256  浏览:    关键词:Spring Cloud 常用组件——Hystrix(下)

在上篇文章中,我们介绍了 Hystrix 的基本概念和配置方法。在这篇文章中,我们将进一步探讨 Hystrix 的进阶配置和监控功能,包括请求缓存、请求合并、自定义指标收集和 Hystrix Dashboard,帮助你更好地利用 Hystrix 提高系统的稳定性和可用性。

一、请求缓存

Hystrix 支持请求缓存功能,可以在相同的请求下返回缓存的响应,从而提高系统的性能。要启用请求缓存,你需要重写 getCacheKey 方法。例如:

import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;public class CachedCommand extends HystrixCommand<String> {private final String id;public CachedCommand(String id) {super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));this.id = id;}@Overrideprotected String run() {// 执行实际的请求逻辑return "Response from " + id;}@Overrideprotected String getCacheKey() {return id;}
}

然后,可以使用 HystrixRequestCache 来管理缓存:

HystrixRequestCache cache = HystrixRequestCache.getInstance(HystrixCommandKey.Factory.asKey("ExampleGroup"), HystrixConcurrencyStrategyDefault.getInstance());
cache.clear("cacheKey");

二、请求合并

Hystrix 支持请求合并功能,可以将多个请求合并成一个批量请求,从而提高系统的性能。要启用请求合并,你需要使用 HystrixCollapser 类。例如:

import com.netflix.hystrix.HystrixCollapser;
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;import java.util.Collection;
import java.util.List;public class BatchCommand extends HystrixCollapser<List<String>, String, String> {private final String id;public BatchCommand(String id) {this.id = id;}@Overridepublic String getRequestArgument() {return id;}@Overrideprotected HystrixCommand<List<String>> createCommand(Collection<CollapsedRequest<String, String>> requests) {return new BatchRequestCommand(requests);}@Overrideprotected void mapResponseToRequests(List<String> batchResponse, Collection<CollapsedRequest<String, String>> requests) {int count = 0;for (CollapsedRequest<String, String> request : requests) {request.setResponse(batchResponse.get(count++));}}
}class BatchRequestCommand extends HystrixCommand<List<String>> {private final Collection<HystrixCollapser.CollapsedRequest<String, String>> requests;public BatchRequestCommand(Collection<HystrixCollapser.CollapsedRequest<String, String>> requests) {super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));this.requests = requests;}@Overrideprotected List<String> run() {// 执行批量请求逻辑return requests.stream().map(request -> "Response for " + request.getArgument()).collect(Collectors.toList());}
}

三、自定义指标收集

Hystrix 提供了多种指标收集功能,允许你自定义指标并进行监控。你可以实现 HystrixMetricsPublisher 接口来自定义指标收集。例如:

import com.netflix.hystrix.strategy.metrics.HystrixMetricsPublisher;
import com.netflix.hystrix.strategy.metrics.HystrixMetricsPublisherCommand;
import com.netflix.hystrix.strategy.metrics.HystrixMetricsPublisherThreadPool;
import com.netflix.hystrix.strategy.metrics.HystrixMetricsPublisherCollapser;public class CustomMetricsPublisher extends HystrixMetricsPublisher {@Overridepublic HystrixMetricsPublisherCommand getMetricsPublisherForCommand(HystrixCommandKey commandKey, HystrixCommandGroupKey commandGroupKey, HystrixCommandMetrics metrics, HystrixCircuitBreaker circuitBreaker, HystrixCommandProperties properties) {return new CustomMetricsPublisherCommand(metrics, circuitBreaker, properties);}@Overridepublic HystrixMetricsPublisherThreadPool getMetricsPublisherForThreadPool(HystrixThreadPoolKey threadPoolKey, HystrixThreadPoolMetrics metrics, HystrixThreadPoolProperties properties) {return new CustomMetricsPublisherThreadPool(metrics, properties);}@Overridepublic HystrixMetricsPublisherCollapser getMetricsPublisherForCollapser(HystrixCollapserKey collapserKey, HystrixCollapserMetrics metrics, HystrixCollapserProperties properties) {return new CustomMetricsPublisherCollapser(metrics, properties);}
}

四、Hystrix Dashboard

Hystrix 提供了一个实时监控面板 Hystrix Dashboard,可以帮助你实时监控系统的健康状况和性能。要启用 Hystrix Dashboard,需要添加相关依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

在 Spring Boot 主应用类中启用 Hystrix Dashboard:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {public static void main(String[] args) {SpringApplication.run(HystrixDashboardApplication.class, args);}
}

配置 application.yml 以启用 Hystrix Dashboard:

management:endpoints:web:exposure:include: hystrix.stream

启动应用后,在浏览器中访问 http://localhost:8080/hystrix,可以看到 Hystrix Dashboard 的界面。输入 http://localhost:8080/actuator/hystrix.stream 以监控具体的服务实例。


总结

通过这两篇文章的详细介绍,我们了解了 Hystrix 的基本概念、配置方法、进阶配置以及监控功能。Hystrix 是一个功能强大且灵活的容错库,能够帮助你在微服务架构中实现高效的故障隔离和恢复机制。

希望这些内容能帮助你更好地理解和使用 Hystrix 构建高效、可扩展的分布式系统。如果你有任何问题或建议,欢迎在评论区留言讨论。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com