feign远程调用服务降级处理
当进行某一服务无法承受处理请求时,进行服务降级:
服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃
服务降级虽然会导致请求失败,但是不会导致阻塞。
服务降级是一种应对系统故障或高负载情况下的一种应对策略,它主要依靠提供一组备选的响应或功能,以保证整体系统的可靠性和稳定性。当主要服务不可用或性能降低时,服务降级可以使系统继续正常工作,提供基本的功能并确保用户体验不受太大影响。
下面是一些常见的服务降级技术和策略:
1. 返回默认值:对于某些无法正常执行的服务调用,可以返回一个预定义的默认值。这可以确保应用程序在主要服务不可用时仍能够继续运行。
2. 异常处理:当主要服务发生故障或响应超时时,可以捕获异常并返回一个预定义的错误响应,而不是抛出异常并导致应用程序崩溃。
3. 限流:当服务负载过重时,可以通过限制请求的速率或并发数来保护服务的可靠性。这可以防止资源被过度耗尽,并确保系统的稳定性。
4. 缓存:对于一些查询操作,可以通过数据缓存来减少对主要服务的依赖。如果主要服务不可用,应用程序可以从缓存中获取数据,以提供基本的功能。
5. 静态页面:在主要服务不可用时,可以提供静态页面或简化的功能页面,以保持用户体验。
实施服务降级时,需要根据具体的系统和业务需求选择合适的策略。服务降级应该是一种临时的解决方案,目的是保证系统的可用性和可靠性,同时应该注重对服务故障的监控和修复,以尽快恢复正常的服务状态。
总结来说,服务降级是一种应对系统故障和高负载的策略,通过提供备选的响应或功能来确保系统的可靠性和稳定性。在实施服务降级策略时,需要根据具体的场景和需求选择合适的降级技术,以提供基本的功能并保持用户体验。
feign远程调用服务降级处理
1、在heima-leadnews-feign-api编写降级逻辑
package com.heima.apis.article.fallback; import com.heima.apis.article.IArticleClient; import com.heima.model.article.dtos.ArticleDto; import com.heima.model.common.dtos.ResponseResult; import com.heima.model.common.enums.AppHttpCodeEnum; import org.springframework.stereotype.Component; @Component public class IArticleClientFallback implements IArticleClient { @Override public ResponseResult saveArticle(ArticleDto dto) { return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR, "获取数据失败"); } }
2、远程接口中指向降级代码
package com.heima.apis.article; import com.heima.apis.article.fallback.IArticleClientFallback; import com.heima.model.article.dtos.ArticleDto; import com.heima.model.common.dtos.ResponseResult; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(value = "leadnews-article", fallback = IArticleClientFallback.class) public interface IArticleClient { @PostMapping("/api/v1/article/save") public ResponseResult saveArticle(@RequestBody ArticleDto dto); }
3、客户端开启降级heima-leadnews-wemedia
feign:
# 开启feign对hystrix熔断降级的支持
hystrix:
enabled: true