场景

SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102535957

SpringCloud-服务注册与实现-Eureka创建服务提供者(附源码下载):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102558004

SpringCloud-创建服务消费者-Ribbon方式(附代码下载):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102558080

SpringCloud-创建服务消费者-Feign方式(附代码下载)::

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102595895

在上面已经实现服务注册中心、服务提供者和以Ribbon方式和Fign方式实现服务消费者的前提下,使用熔断器防止服务雪崩。

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过 RPC 相互调用,在 Spring Cloud 中可以用 RestTemplate + Ribbon 和 Feign 来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证 100% 可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩” 效应。

熔断器打开后,为了避免连锁故障,通过 fallback 方法可以直接返回一个固定值。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

Ribbon中使用熔断器

SpringCloud-创建服务消费者-Ribbon方式(附代码下载):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102558080

在上面使用Ribbon实现创建服务消费者。

我们在pom.xml中加入hystrix的依赖:

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

完整pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.badao</groupId><artifactId>hello-spring-cloud-dependencies</artifactId><version>1.0.0-SNAPSHOT</version><relativePath>../hello-spring-cloud-dependencies/pom.xml</relativePath></parent><artifactId>hello-spring-cloud-web-admin-ribbon</artifactId><packaging>jar</packaging><name>hello-spring-cloud-web-admin-ribbon</name><url>https://blog.csdn.net/badao_liumang_qizhi</url><inceptionYear>2019-Now</inceptionYear><dependencies><!-- Spring Boot Begin --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Spring Boot End --><!-- Spring Cloud Begin --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!-- Spring Cloud End --><!-- 解决 thymeleaf 模板引擎一定要执行严格的 html5 格式校验问题 --><dependency><groupId>net.sourceforge.nekohtml</groupId><artifactId>nekohtml</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.funtl.hello.spring.cloud.web.admin.ribbon.WebAdminRibbonApplication</mainClass></configuration></plugin></plugins></build>
</project>

然后在应用启动类Application中增加@EnableHystrix注解

package com.badao.hello.spring.cloud.web.admin.ribbon;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class WebAdminRibbonApplication {public static void main(String[] args) {SpringApplication.run(WebAdminRibbonApplication.class, args);}
}

然后在Service中添加@HystrixCommand注解

在 Ribbon 调用方法上增加 @HystrixCommand 注解并指定 fallbackMethod 熔断方法。

package com.badao.hello.spring.cloud.web.admin.ribbon.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;@Service
public class AdminService {@Autowiredprivate RestTemplate restTemplate;@HystrixCommand(fallbackMethod = "hiError")public String sayHi(String message) {return restTemplate.getForObject("http://hello-spring-cloud-service-admin/hi?message=" + message, String.class);}public String hiError(String message) {return "Hi,your message is :\"" + message + "\" but request error.";}
}

测试熔断器

为了测试熔断器效果,我们将服务提供者关闭,此时再次请求:

http://localhost:8764/hi?message=HelloRibbon

Feign中使用熔断器

Feign自带熔断器,所以不用添加依赖,只需要在配置文件中配置打开。

feign:hystrix:enabled: true

完整配置文件:

spring:application:name: hello-spring-cloud-web-admin-feignthymeleaf:cache: falsemode: LEGACYHTML5encoding: UTF-8servlet:content-type: text/htmlserver:port: 8765eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/feign:hystrix:enabled: true

然后再Service中增加fallback指定类

package com.badao.hello.spring.cloud.web.feign.service;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;@FeignClient(value = "hello-spring-cloud-service-admin", fallback = AdminServiceHystrix.class)
public interface AdminService {@RequestMapping(value = "hi", method = RequestMethod.GET)public String sayHi(@RequestParam(value = "message") String message);
}

此时再service包下创建熔断器并实现对应的Feign接口

package com.badao.hello.spring.cloud.web.feign.service;import org.springframework.stereotype.Component;@Component
public class AdminServiceHystrix implements AdminService {@Overridepublic String sayHi(String message) {return "Hi,your message is :\"" + message + "\" but request error.";}
}

然后将服务提供者关闭,再次请求:

http://localhost:8765/hi?message=HelloFeign

代码下载

https://download.csdn.net/download/badao_liumang_qizhi/11871136

SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式(附代码下载)相关推荐

  1. SpringCloud-创建服务消费者-Ribbon方式(附代码下载)

    场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  2. Dubbo搭建HelloWorld-搭建服务提供者与服务消费者并完成远程调用(附代码下载)

    场景 Dubbo简介与基本概念: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103555224 Dubbo环境搭建-ZooKe ...

  3. 从实例一步一步入门学习SpringCloud的Eureka、Ribbon、Feign、熔断器、Zuul的简单使用(附代码下载)

    场景 SpringCloud -创建统一的依赖管理: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102530574 Sprin ...

  4. 微服务之服务注册与发现--Eureka(附代码)

    微服务之服务注册与发现--Eureka(附代码) 该贴为入门贴,看完可快速知道服务注册与发现是什么?怎么用?至于深入的内容不在此篇文章所述之内,请自行百度. 内容来自:https://blog.csd ...

  5. feign整合sential,Feign中使用Sentinel熔断器防止服务雪崩

    服务故障雪崩效应 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过 RPC 相互调用,在 Spring Cloud 中可以用 RestTemplate + LoadBalanceC ...

  6. SpringCloud系列之服务消费Ribbon和Feign区别

    在业界,一般有两种微服务的实践方法:基于dubbo的微服务架构.基于Spring Cloud的微服务架构.从概念上来讲,Dubbo和Spring Cloud并不能放在一起对比,因为Dubbo仅仅是一个 ...

  7. SpringCloud微服务:Ribbon和Feign组件,实现服务调用的负载均衡

    一.Ribbon简介 1.基本概念 Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TCP客户端的访问控制. 2.负载均衡简介 目前主流的负载均衡 ...

  8. 【springCloud搭建】四、集成ribbon+hystrix+feign

    上篇文章传送门:[springCloud搭建]三.集成springCloudGateway网关  ribbon+hystrix+feign所需的第三方包 <!--feign服务通讯组件--> ...

  9. spring cloud 微服务调用--ribbon和feign调用

    这里介绍ribbon和feign调用两种通信服务调用方式,同时介绍如何引入第三方服务调用.案例包括了ribbon负载均衡和hystrix熔断--服务降级的处理,以及feign声明式服务调用.例子包括s ...

  10. gPRC简介以及Java中使用gPRC实现客户端与服务端通信(附代码下载)

    场景 ProtoBuf的介绍以及在Java中使用protobuf将对象进行序列化与反序列化: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

最新文章

  1. Windows下Memcached的安装与配置
  2. 反光衣识别算法冠军方案总结(附源码)|极市打榜
  3. python基本程序结构有几种_python基础梳理(一)(推荐)
  4. Hibernate4实战 之 第一部分 Hibernate入门
  5. Android 图文混排 通过webview实现并实现点击图片
  6. 学习vue.js 第一天
  7. Java变量名命名规则
  8. expdp导出表结构_Oracle用exp导出部分表和expdp
  9. wordpress上传图片按时间重命名
  10. 2015年全国大学生电子设计竞赛A题(双向DC-DC变换器)训练总结(硬件部分)
  11. 882. Reachable Nodes In Subdivided Graph
  12. 13个Python必备的知识,建议收藏
  13. Word2Vec与文章相似度
  14. Vite入门从手写一个乞丐版的Vite开始(下)
  15. 服务器装系统bios设置方法,重装系统时BIOS的设置方法
  16. 用python计算圆周率
  17. HTTP Error503 错误解决办法
  18. uniapp抖音小程序发布激励广告
  19. tomcat怎么修改默认端口号
  20. mysql 字符串的hash函数_经典字符串Hash函数介绍 - yanjun_1982的专栏 - CSDNBlog

热门文章

  1. 中国电信php,一个基于中国电信开放应用平台的短信发送函数(PHP版)
  2. java缓冲溜大题_求大神解答这一道Java题 第20题 跪谢!
  3. 软件架构与设计(二)-----架构模型
  4. 单射、满射、双射(一一映射)
  5. [HNOI2007] 紧急疏散EVACUATE
  6. 最新获得淘宝app商品详情原数据 的API
  7. 史上最全的 SQL 注入资料,收藏不谢
  8. 字蛛font-spider报错 web font not found
  9. webx参数注入、bean创建总结
  10. 手机如何双声道录音_中老年智能手机教程:手机通话如何录音?