概述
**Hystrix断路器:**就是让服务进行隔离,在微服务中服务之间是相互调用的,如果服务之间不能相互隔离,很可能会出现雪崩效应。Hystrix相当于一个保险丝,保护其他服务不受影响。
完整的pom文件:
<?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">
<parent>
<artifactId>cloud</artifactId>
<groupId>com.fangjia</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<!-- feign远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--Hystrix 依赖 主要是用 @HystrixCommand-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
</dependencies>
</project>
启动类:
@SpringBootApplication
@EnableFeignClients(basePackages = "com.fangjia")
@EnableHystrix
@EnableEurekaClient
public class FangJiaApiApplication {
public static void main(String[] args) {
SpringApplication.run(FangJiaApiApplication.class,args);
}
}
配置文件中开启hystrix:
feign:
hystrix:
enabled: true
可以配置远程调用的日志输出:
@Configuration
public class FeignConfiguration {
@Bean
Logger.Level apiLogLevel(){
/**
* 日志输出级别
* NONE:不输出日志
* BASIC: 输出请求方法的url和请求的响应时间
* HEADERS: 将BASIC信息和请求头信息输出
* FULL:输出完整的信息
*/
return Logger.Level.FULL;
}
}
完整yml文件:
server:
port: 8660 #服务端口
eureka:
client:
registerWithEureka: true #服务注册开关
fetchRegistry: true #服务发现开关
serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔
defaultZone: http://username:123456@localhost:8661/eureka/ #开启eureka验证之后需要加上用户名密码才能注册上去、
instance:
prefer-ip-address: true #将自己的ip地址注册到Eureka服务中
ip-address: localhost
instance-id: fangzi-api:8660 #指定实例id
lease-renewal-interval-in-seconds: 5 #表示EurekaClient 发送心跳给 server端的频率
lease-expiration-duration-in-seconds: 5 #表示EurekaServer 至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则移除该 Instance
spring:
application:
name: fangzi-api
#配置日志输出级别
logging:
level:
com.fangjia.api.client.HelloApiService: DEBUG
feign:
hystrix:
enabled: true
建议:将所有的远程调用服务接口放在一个微服务下进行管理,这样调用的时候打成一个jar包引入即可
远程调用接口:
/**
* create by: liyunxing
* description:
* create time: 16:22 2019/8/16
* value:请求的服务名称
* Path:名称的前缀
* configuration:定义的日志输出级别的配置类
*/
@FeignClient(value = "fangzi-feign",
path = "fangzi",
configuration = FeignConfiguration.class,
fallback = HelloApiServiceFallBack.class)
@Component
public interface HelloApiService {
@GetMapping(value = "hello")
String hello();
}
hystrix断路由类:
@Component
@RequestMapping(value = "fallback/fangjia")//注意路径要和Feign区分
public class HelloApiServiceFallBack implements HelloApiService{
@Override
public String hello() {
return "调用失败";
}
}
此时如果没有启用其他服务,将会显示“调用失败信”息。
停用hystrix
1.全部停用:在配置文件中将true改为false
2.单个服务停用:在服务中增加如下配置:
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder(){
return Feign.builder();
}
最后
以上就是想人陪画板为你收集整理的SpringCloud-Hystrix 断路器的全部内容,希望文章能够帮你解决SpringCloud-Hystrix 断路器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复