Spring Cloud Feign 实现服务降级
2018-01-18 14:49
555 查看
当后端一个接口响应非常慢的时候,那么请求该接口的时候会被强制等待,直到返回或者超时结束.若在高负载的情况下,如果不做处理的话,这些问题会导致系统崩溃.
Feign已经为我们集成了Hystrix,默认就会使用断路器包裹所有方法
下面来看下简单的服务降级使用过程:
继续使用前面搭建的Eureka,Feign,Service服务
一 : 新建一个UserServiceFallBack类,实现UserService接口
package cn.sh.daniel.fallback;
import org.springframework.stereotype.Component;
import cn.sh.daniel.entity.User;
import cn.sh.daniel.service.UserService;
/**
* UserService接口的降级服务
*
* @author Daniel
* @time 2018年1月18日 下午2:35:09
*
*/
@Component
public class UserServiceFallBack implements UserService{
@Override
public User findUserById(Long id) {
return new User();
}
@Override
public String aveUser(User user) {
return "Error";
}
@Override
public User findUserByNameAndPassword(String name, String password) {
return new User();
}
}这边只是简单的实现了这几个方法二 : 在UserService接口中添加fallback去指定降级的方法
package cn.sh.daniel.service;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import cn.sh.daniel.config.FeignLoggerConfiguration;
import cn.sh.daniel.entity.User;
import cn.sh.daniel.fallback.UserServiceFallBack;
@FeignClient(value = "cloud-shop-userservice",fallback = UserServiceFallBack.class,configuration = FeignLoggerConfiguration.class)
public interface UserService {
@GetMapping("/user/{id}")
public User findUserById(@PathVariable("id")Long id);
@PostMapping("/user/user")
public String aveUser(@RequestBody User user) ;
@GetMapping("/user/findUser")
public User findUserByNameAndPassword(@RequestParam("name")String name ,@RequestParam("password")String password);
}三 : 重启Feign服务,调用服务
可以正常调用, 那此处将userservice服务shut down掉,再执行此方法看效果
直接报错了?
经过查证,原来feign集成hystrix需要配置开启
feign:
hystrix:
enabled: true
重新启动继续上面的操作:
发现终于走进了降级方法啦!!
Feign已经为我们集成了Hystrix,默认就会使用断路器包裹所有方法
下面来看下简单的服务降级使用过程:
继续使用前面搭建的Eureka,Feign,Service服务
一 : 新建一个UserServiceFallBack类,实现UserService接口
package cn.sh.daniel.fallback;
import org.springframework.stereotype.Component;
import cn.sh.daniel.entity.User;
import cn.sh.daniel.service.UserService;
/**
* UserService接口的降级服务
*
* @author Daniel
* @time 2018年1月18日 下午2:35:09
*
*/
@Component
public class UserServiceFallBack implements UserService{
@Override
public User findUserById(Long id) {
return new User();
}
@Override
public String aveUser(User user) {
return "Error";
}
@Override
public User findUserByNameAndPassword(String name, String password) {
return new User();
}
}这边只是简单的实现了这几个方法二 : 在UserService接口中添加fallback去指定降级的方法
package cn.sh.daniel.service;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import cn.sh.daniel.config.FeignLoggerConfiguration;
import cn.sh.daniel.entity.User;
import cn.sh.daniel.fallback.UserServiceFallBack;
@FeignClient(value = "cloud-shop-userservice",fallback = UserServiceFallBack.class,configuration = FeignLoggerConfiguration.class)
public interface UserService {
@GetMapping("/user/{id}")
public User findUserById(@PathVariable("id")Long id);
@PostMapping("/user/user")
public String aveUser(@RequestBody User user) ;
@GetMapping("/user/findUser")
public User findUserByNameAndPassword(@RequestParam("name")String name ,@RequestParam("password")String password);
}三 : 重启Feign服务,调用服务
可以正常调用, 那此处将userservice服务shut down掉,再执行此方法看效果
直接报错了?
经过查证,原来feign集成hystrix需要配置开启
feign:
hystrix:
enabled: true
重新启动继续上面的操作:
发现终于走进了降级方法啦!!
相关文章推荐
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十九):服务消费(Ribbon、Feign)
- 微服务框架Spring Cloud介绍 Part4: 使用Eureka, Ribbon, Feign实现REST服务客户端
- springcloud hystrix 实现服务降级解决服务器雪崩
- springcloud使用feign实现服务间条用,参数数据太大,无法调用成功解决方法
- SpringCloud系列:服务注册与发现、负责均衡、hystrix服务降级的实现
- spring cloud feign实现远程调用服务传输文件的方法
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十一):服务网关(Zuul)
- springboot+spring cloud实现简单的gateway注册服务
- spring cloud之服务调用及使用ribbon实现负载均衡(三)
- spring cloud feign 调用微服务转发不了request请求头和参数问题解决方案
- Spring Cloud Feign作为HTTP客户端调用远程HTTP服务,feign熔断器
- springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
- 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
- Jenkins+Svn+Docker+SpringCloud 实现可持续自动化微服务
- 微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务
- .net framework 4.5 +steeltoe+ springcloud(一) 实现服务注册功能
- 使用Spring Cloud Zookeeper实现服务的注册和发现
- Spring Cloud Spring Boot mybatis 企业分布式微服务云(七)服务容错保护(Hystrix服务降级)【Dalston版】
- 一起来学SpringCloud之 - 服务消费者(Feign-上)
- Spring Cloud 声明式服务调用 Feign