Hystrix(容错处理机制)的使用
Hystrix提供了熔断、隔离、Fallback、cache、监控等功能。
FallBack(回退):
Hystrix在使用过程中最简单的一种实现方式就是通过fallback机制进行备份访问。
在接口类里面配置fallback属性:
|
对应的类为此接口的实现类
package com.example.client.client;
import entity.User;
import org.springframework.stereotype.Component;
@Component //为了使spring能够识别此类
public class UserFeignClientFallback implements UserFeignClient {
@Override
public String hello() {
return "这个就是备份的hello!";
}
@Override
public boolean checkuser(String userName, String userPwd) {
return false;
}
@Override
public Object checkuser(User user) {
return "这个是备份的checkuser!";
}
}
配置文件里面需要配置容错库的使用:
feign:
hystrix:
enabled: true
这样的话,当服务端崩掉或者不能访问的时候就会自动的映射到这个接口的实现类上面,调取实现类里面的方法。
监控:(HystrixDashboard Turbine)
1、首先需要一个独立的hystrix服务端口进行可视化监控。
创建一个springboot项目,创建的过程中需要集成:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> 提供一个数据解析器
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId> 关键组件
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> 有仪表盘的意思,可视化工具
</dependency>
启动类里面添加注解:@EnableHystrixDashboard
package com.example.hystrix;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
@SpringBootApplication
@EnableHystrixDashboard
public class HystrixApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixApplication.class, args);
}
}
配置文件中添加:定义端口号。
server:
port: 5014
spring:
application:
name: hystrixboard
创建的这个可视化窗口是用来处理数据的一个工具。具体的数据是由具体页面提供的,例如实现了hystrix的类,或者进行监控端口活动的turbine类。提供的是一个json数据。
2、通过实现添加一个注解:@EnableCircuitBreaker实现对该端口的数据访问监控。
package com.example.client;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableCircuitBreaker
public class ClientApplication2 {
public static void main(String[] args) {
SpringApplication.run(ClientApplication2.class, args);
}
}
通过client的端口号+/hystrix.stream 进行监控该端口的信息访问。
3、通过Turbine 方法实现监控。
首先创建一个turbine项目,添加插件turbine 、hystrix、eureka discovery、actuator.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
启动类添加注解:@EnableTurbine
package com.example.turbine;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.turbine.EnableTurbine;
@SpringBootApplication
@EnableTurbine
public class TurbineApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineApplication.class, args);
}
}
配置文件添加:
server:
port: 5050
spring:
application:
name: turbinserver
eureka:
client:
service-url:
defaultZone: http://localhost:5001/eureka
instance:
prefer-ip-address: true
turbine:
cluster-name-expression: "'default'"
combine-host-port: true
app-config: user,user2 这个是检测端口的注册名称
然后通过turbine端口的/turbine.stream地址进行数据的访问,获得json数据。
最后:在可视化窗口的hystrix类的端口访问中,填入数据访问的地址。就可以实现单一/多个微服的监测功能。