概述
文章目录
- 0.准备
- 1.Feign断路器
- 1.1 pom.xml
- 1.2 application配置
- 1.3 application注解
- 1.4服务申明
- 1.5 服务测试接口
- 1.6 运行测试
- 2.Ribbon断路器
- 2.1 pom.xml
- 2.2 application配置
- 2.3 application注解
- 2.4服务申明
- 2.5服务测试接口
- 2.6运行测试
断路器对于一个应用服务器体系,是一个很重要的功能。从它的命名可以看出,它就像是电路系统里的保险丝,当超过负载时,保险丝会选择断开,这条路线就断开了,保护了这条路线的系统。
对于应用服务器也是如此。当单个节点出现异常,对于系统来说,最好的选择是不去选择这个节点。断路器应运而生。
断路器设置针对服务调用一方,这很好理解,不做记录。
断路器针对之前的Ribbon和Feign都可以实现。下面,分别针对这两种做断路器实现。
0.准备
打开之前的服务中心和服务提供者,如下所示(这里服务提供者就不双开,反正要断路,到时候要关掉):
1.Feign断路器
Feign默认已经带上断路器功能,你需要做的是打开配置。
1.1 pom.xml
新建一个项目,选择eureka discovery和feign
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-openfeign</artifactId>
</dependency>
1.2 application配置
spring:
application:
name: four-feign-hystrix
server:
port: 8820
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8800/eureka/
##找不到也要配
feign:
hystrix:
enabled: true
可以看到我上面的注释,feign.hystrix.enabled找不到,但是需要配置上,feign断路功能才能打开。
1.3 application注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FourFeignHystrixApplication {
public static void main(String[] args) {
SpringApplication.run(FourFeignHystrixApplication.class, args);
}
}
1.4服务申明
@FeignClient(name = "eureka-client", fallback = HiServiceHystrix.class)
public interface HiService {
@RequestMapping("/hi")
String hi(@RequestParam("name")String name);
}
同先前一样,通过FeignClient设置服务提供者,区别在于多了一个fallback。fallback是用来配置提供者调用不到,断路时,选择应急返回数据实现。如下所示:
@Component
public class HiServiceHystrix implements HiService{
@Override
public String hi(String name) {
return "Sorry "+name;
}
}
断路分三个状态?:关闭,半开,全开。关闭意味着断路完全没工作,全开意味着断路器彻底工作。
1.5 服务测试接口
@RestController
public class TestController {
@Autowired
private HiService hiService;
@GetMapping("/hi/{name}")
public String index(@PathVariable("name")String name) {
return hiService.hi(name);
}
}
1.6 运行测试
好了,运行这个Feign,此时如下:
访问http://localhost:8820/hi/Steven
Hi Steven, I’m from port : 8810
接着,关闭eureka-client服务提供者这个节点
再访问http://localhost:8820/hi/Steven
Sorry Steven
到此,Feign断路器搭建完成。
2.Ribbon断路器
Ribbon断路实现相对于Feign稍微复杂点,因为它没有断路功能,需要额外引入库。
2.1 pom.xml
新建springboot项目,勾选eureka discovery,ribbon和hystrix
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
2.2 application配置
spring:
application:
name: four-ribbon-hystrix
server:
port: 8820
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8800/eureka/
2.3 application注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class FourRibbonHystrixApplication {
public static void main(String[] args) {
SpringApplication.run(FourRibbonHystrixApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
在ribbon配置基础上,增加了@EnableHystrix注解,打开hystrix断路功能。
2.4服务申明
@Service
public class HelloService {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "hiError")
public String hiService(String name) {
return restTemplate.getForObject("http://eureka-client/hi?name="+name, String.class);
}
public String hiError(String name) {
return "hi, "+name+", sorry, error!";
}
}
在原先的基础上增加了@HystrixCommand(fallbackMethod = “hiError”)和hiError方法实现。
HystrixCommand指明了断路时,应急的方法调用。
2.5服务测试接口
@RestController
public class HelloController {
@Autowired
private HelloService helloService;
@GetMapping("/hi")
public String hi(String name) {
return helloService.hiService(name);
}
}
2.6运行测试
运行Ribbon版断路实现应用,如下:
访问http://localhost:8820/hi?name=Steven
Hi Steven, I’m from port : 8810
关闭eureka-client服务提供者
此时再访问http://localhost:8820/hi?name=Steven
hi, Steven, sorry, error!
至此,Feign和Ribbon的断路都实现了。
最后
以上就是自觉哈密瓜为你收集整理的SpringCloud-Feign-Ribbon断路器的全部内容,希望文章能够帮你解决SpringCloud-Feign-Ribbon断路器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复