springcloud熔断机制
时间:2020-03-26
本文章向大家介绍springcloud熔断机制,主要包括springcloud熔断机制使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
熔断机制,指的是微服务架构中,由于某个服务瘫痪,为避免影响整个系统而采取的降级服务
简述:
由于网络或自身原因,服务不能确保一定可用。如果某个服务出现了问题,调用方的大量请求会使Servlet容器的线程资源被耗尽,导致服务瘫痪。而且这种故障会传播,进而威胁到这个微服务系统可用性
示例如下:基于springboot1.5.10
添加依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.10.RELEASE</version> </dependency> <!--Eureka 客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>1.4.3.RELEASE</version> </dependency> <!--hystrix断路器--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>1.4.3.RELEASE</version> </dependency>
application配置
server: port: 8901 #程序启动端口,也是Tomcat端口 spring: application: name: customer-order-hystrix #应用别名 eureka: client: service-url: defaultZone: http://user:123@localhost:10000/eureka instance: instance-id: ${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}} prefer-ip-address: true
启动类
@SpringBootApplication @EnableEurekaClient @EnableCircuitBreaker //启用熔断 public class CustomerHystrixApplication { @Bean public RestTemplate getTemp(){ return new RestTemplate(); } public static void main( String[] args ) { SpringApplication.run(CustomerHystrixApplication.class,args); System.out.println("customer start-up success"); } }
实体类
public class User { private Long id; private Date date; public User() { } public User(Long id) { this.id = id; this.date = new Date(); } public void setId(Long id) { this.id = id; } public void setDate(Date date) { this.date = date; } public Long getId() { return id; } public Date getDate() { return date; }
Controller
@RestController public class CustomeController { @Autowired private EurekaClient eurekaClient; @Autowired private RestTemplate restTemplate;//springboot提供的用于访问rest接口的对象 @GetMapping("/order/{id}") @HystrixCommand(fallbackMethod = "errora1") public User getOrder(@PathVariable Long id){ InstanceInfo instanceInfo = eurekaClient.getNextServerFromEureka("provider-user", false); String homePageUrl = instanceInfo.getHomePageUrl(); // 访问提供者,获取数据 User user = restTemplate.getForObject(homePageUrl+"/user/" + id,User.class);//通过访问rest获取json数据,然后转换成user对象 return user; } /** * 失败后执行的回调函数 * @param id * @return */ public User errora1(Long id) { User user = new User(); user.setId(-1000L); user.setDate(new Date()); return user; } }
注:回调函数和其使用者应返回相同的类型
原文地址:https://www.cnblogs.com/jincheng81/p/12575186.html
- Redis的各项功能解决了哪些问题?
- WordPress.com 宣布支持Markdown 语言
- 使用Topshelf 5步创建Windows 服务
- TGM Plugin Activation:为WordPress 主题添加“插件推荐安装”功能
- [腾讯社区开放平台]介绍开放授权协议-OAuth
- HTML5规范的本地存储
- ASP.NET Web API 处理架构
- ASP.NET MVC 4中的单页面应用程序
- [信息安全] 4.一次性密码 && 身份认证三要素
- 拥抱大数据时代
- 腾讯社区开放平台.NET SDK在Mono下运行
- Redis Web界面管理工具
- [信息安全] 3.HTTPS工作流程
- 初探css3
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释