spring cloud --- Ribbon 客户端负载均衡 + RestTemplate + Hystrix 熔断器 [服务保护] ---心得
2021-01-22 22:13
标签:server org local idle apach reg 使用 需要 als 当超大并发量并发访问一个服务接口时,服务器会崩溃 ,不仅导致这个接口无法再使用,而且还会导致整个服务器的接口都无法使用。。。 因此 ,为解决这个问题,引入了 熔断器 Hystrix 当进入熔断机制后,可以调用自定义的方法来做其他操作,然后响应前端,这样不会就导致线程阻塞,也不会导致服务器崩溃,一般5秒后会进入半熔断状态,如果检测到服务器未能恢复,继续进入熔断状态,并对该访问接口做服务隔离,不影响其他接口的使用 在另一篇文章已经详细讲解了Ribbon 客户端负载均衡 + RestTemplate 的使用 ,在他的基础上,加上熔断器Hystirx (1)添加Hystrix依赖包 ,包括监控面板依赖包 【因为这是子级maven ,继承了父级maven ,所以不需要设置版本号 】 完整的pom.xml (2)在需要保护的接口添加注解,fallbackMethod是熔断后执行的回调方法 完整controller (3)在启动类添加注解开启Hystrix (1) 为了做压力测试,我在controller线程休眠5秒 (2)先后 启动 端口7001 的服务注册中心 ,端口8001、8003的服务提供者 ,端口565的服务消费者 输入网址 http://localhost:565/bb ,访问两次 访问其他服务 http://localhost:565/cc ok ,可以正常访问, 现在进行压力测试 ,使用工具 JMetter , 开启1000个线程同时访问 http://localhost:565/bb , 【如果不开启 熔断器Hystrix ,会导致服务器崩溃 ,所有的接口都无法使用,一直在等待状态】 现在已经开启了Hystrix ,浏览器访问 http://localhost:565/bb 看看什么效果 再访问其他服务 http://localhost:565/cc,可以正常访问, 关闭工具 JMetter的线程 ,再次浏览器访问 http://localhost:565/bb 看看什么效果 ,发现又可以访问了 测试成功,撒花!!! 上面提到,因为需要,休眠了5秒 ,这会导致即便不使用 JMeter 访问,也会导致服务熔断 ,因为Hystrix会认为访问超时 ,为了测试,可以关闭 超时限制 在application.yml文件设置 完整的yml ------------------------------------------------------------------- 参考博文原址 :https://www.jianshu.com/p/cce702d44b7d spring cloud --- Ribbon 客户端负载均衡 + RestTemplate + Hystrix 熔断器 [服务保护] ---心得 标签:server org local idle apach reg 使用 需要 als 原文地址:https://www.cnblogs.com/c2g5201314/p/12886086.html1.前言
Hystrix
是一套完善的服务保护组件, 可以实现服务降级
, 服务熔断
, 服务隔离
等保护措施 使用它可以合理的应对高并发的情况 做到保护服务的效果。2.操作
//在访问接口开启服务保护
@HystrixCommand(fallbackMethod = "myFallback")package com.example.demomycentest.controller;
//import com.example.demomycen22.pojo.Food;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCollapser;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@PropertySource("classpath:my.properties")
public class GGController {
private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT1";
/**
* 使用 使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap,
* ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。
*/
@Autowired
private RestTemplate restTemplate;
//在访问接口开启服务保护
@HystrixCommand(fallbackMethod = "myFallback")
@RequestMapping("/bb")
public String bb(){
// Food d = new Food();
// d.setApple("苹果");
// d.setEgg("鸡蛋");
// System.out.println(d);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("调用服务,开启负载均衡Ribbon");
//使用restTemplate 直接调用 ,postForObject 是post请求方式 ,getForObject是get请求方式,根据服务提供者的接口选择,这个是需要提前知道服务提供者的接口格式的
return restTemplate.getForObject(REST_URL_PREFIX + "/ask", String.class) +"===========消费者端口是"+port;
}
@Value("${kk.gg}")
private String port;
public String myFallback(){
return "服务繁忙,已经开启了Hystrix";
}
@RequestMapping("/cc")
public String otherService() {
return "我是其他服务";
}
}
3.测试
server:
port: 565
spring:
application:
name: demo-my-cen-test
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包
url: jdbc:mysql://localhost:3306/dfs?characterEncoding=utf-8 # 数据库名称
username: root
password: mysql
dbcp2:
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化连接数
max-total: 5 # 最大连接数
max-wait-millis: 200 # 等待连接获取的最大超时时间
eureka:
client:
register-with-eureka: false # 当前微服务不注册到eureka中(消费端)
service-url:
defaultZone: http://localhost:7001/eureka/
# 如果有注册中心不在线,但是写上了地址,会报错
# ,http://localhost:7002/eureka/,http://localhost:7003/eureka/
hystrix:
command:
default:
execution:
timeout:
enabled: false # 忽略hystrix的超时时间
上一篇:Python字典如何根据值返回键
下一篇:maven打包jar文件
文章标题:spring cloud --- Ribbon 客户端负载均衡 + RestTemplate + Hystrix 熔断器 [服务保护] ---心得
文章链接:http://soscw.com/index.php/essay/45611.html