一.Feign组件调用远程服务的实现过程:
1.在controller层调用fegin定义的接口
2.在fegin的接口中,在头部定义@FeginClient,以及要调用的实例名称,配置信息,同时在每个调用方法前面加上@RquestLine等注解来定义请求访问的url和方式。
二.在Feign接口组件中使用Hystrix
Spring Cloud默认已为Feign整合了Hystrix,Feign默认就会用断路器包裹所有方法。如果要使用Feign的Hystrix支持,可以设置feign.hystrix.enabled=true,要禁用,设置为false即可。
1.修改application.yml文件:
2.将controller中:超时熔断代码放到fegin的接口实现类中
修改后:
3.fegin的借口层:
package com.ljf.weifuwu.springcloud.hystrix.service;
import com.ljf.weifuwu.springcloud.hystrix.model.HystrixUser;
import config.HystrixUserConfig;
import feign.Param;
import feign.RequestLine;
import org.springframework.cloud.netflix.feign.FeignClient;
@FeignClient(name="ms-eureka-provider",configuration = HystrixUserConfig.class,fallback = HystrixFallBack.class)
public interface HystrixUserFegin {
//和ms-eureka-provider模块中的路径要保持一致/eureka-provider/{id}
// @GetMapping("/eureka-provider/{id}")
// public EurekaUser getSingleUser(@PathVariable Long id)
@RequestLine("GET /eureka-provider/{id}") //使用fegin的特用注解,确保 HystrixUserConfig这个自定义的配置类进行了配置
public HystrixUser getSingleUser(@Param("id") Long id);
}
4.fegin接口的实现熔断逻辑的实现类:
1. 接口HystrixUserFegin和实现类HystrixFallBack必须放在同一个包中
2.实现类要实现接口中定义的方法,方法中的逻辑是我们针对出现异常问题要怎么处理的一些逻辑
3.接口中的方法使用fegin特有的请求注解时(@RequestLine("GET /eureka-provider/{id}") ),确保configuration调用的类中实现了开启fegin注解使用的代码:
@Bean public Contract feignContract() { return new feign.Contract.Default();//只识别Feign的注释,不再识别Spring MVC的HTTP注释。 }
package com.ljf.weifuwu.springcloud.hystrix.service;
import com.ljf.weifuwu.springcloud.hystrix.model.HystrixUser;
import com.ljf.weifuwu.springcloud.hystrix.service.HystrixUserFegin;
import org.springframework.stereotype.Component;
@Component
public class HystrixFallBack implements HystrixUserFegin {
/**
* 针对此方法,做的超时异常处理
* @param id
* @return
*/
@Override
public HystrixUser getSingleUser(Long id) {
System.out.println("超时发生错误的.....使用fegin-hystrix进行处理");
HystrixUser u=new HystrixUser();
u.setId(00l);
u.setName("fegin-hystrix-超时错误");
return u;
}
}
4.启动服务:ms-eureka-center(8761)、ms-eureka-provider(9701)、ms-hystrix-consumer(8005)
5.访问:没问题,都能正常访问
6.验证hystrix超时熔断处理逻辑,关闭ms-eureka-provider服务提供者:再次访问
ok,到此结束,fegin接口组件整合hystrix功能,到此结束。