利用Hystrix对接口control层进行服务降级
新建子工程service03,作为测试Hystrix服务降级的微服务
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">
<parent>
<artifactId>springcloud_test01</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service03</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- conslu -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- actuator 心跳检查 -->
<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>
<!-- hystrix 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
</dependencies>
</project>
application.yaml
server:
port: 8083
spring:
application:
name: service3
cloud:
consul:
port: 8500
host: 127.0.0.1
discovery:
instance-id: ${spring.application.name}-${server.port}-${spring.cloud.client.ip-address}
prefer-ip-address: true
业务代码
control层降级注解
package com.ccj.sentineltest.controller;
import com.ccj.sentineltest.service.HystrixService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("sentinel")
public class HystrixController {
private static final String EXPIRATION_TIME = "2000";
private final HystrixService service;
public HystrixController(HystrixService service) {
this.service = service;
}
//接口超过2秒未返回,自动降级,返回timeoutHandler的内容
@HystrixCommand(fallbackMethod = "timeoutHandler", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = EXPIRATION_TIME)
})
@GetMapping
public String test() throws InterruptedException{
return service.sayHello();
}
private String timeoutHandler() {
return "服务繁忙,请稍候重试!";
}
}
Application.class springboot启动类
@SpringBootApplication
@EnableCircuitBreaker //开启Hystrix
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}