SpringCloud-Feign的使用
SpringCloud-Feign结合了ribbon的负载均衡和hystrix的服务熔断,并且使得远程方法的调用变得十分简单,就犹如调用的是一个service层方法。
1.创建一个springboot工程
这一步在idea中实现起来非常方便,略过。
2.在pom.xml文件中导入依赖
<!--SpringCloud 集成 eureka 客户端的起步依赖-->
<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-feign</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<!--Spring Cloud 熔断器起步依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
3.添加注解
@SpringCloudApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在项目启动类上添加@EnableFeignClients表示开启Feign
4.声明服务
@FeignClient(name="01-SPRINGCLOUD-SERVICE-PROVIDER", /*fallback = MyFallback.class*/ fallbackFactory = MyFallbackFactory.class)
public interface IHelloFeignService {
/**
* 声明一个方法,这个方法就是远程的服务提供者提供的方法
* @return
*/
@RequestMapping("/service/hello")
public String helloFeign();
}
@FeignClient(name=“01-SPRINGCLOUD-SERVICE-PROVIDER”)其中这一行代码是指定我们eureka注册中心的服务。
@RequestMapping("/service/hello") 这一句代码是指定了远程服务提供者提供的方法。
5.编写controller类调用service层接口
@RestController
public class FeignController {
@Autowired
private IHelloFeignService helloFeignService;
@RequestMapping("/feign/hello")
public String hello(){
return helloFeignService.helloFeign();
}
}
6.配置信息
在application.properties中加上配置:
server.port=8082
#配置服务的名称
spring.appli|cation.name=04-springcloud-service-feign
#配置eureka的服务中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
#开启hystrix功能
feign.hystrix.enabled=true
7.Feign开启hystrix熔断功能
@FeignClient(name="01-SPRINGCLOUD-SERVICE-PROVIDER", /*fallback = MyFallback.class*/ fallbackFactory = MyFallbackFactory.class)
public interface IHelloFeignService {
/**
* 声明一个方法,这个方法就是远程的服务提供者提供的方法
* @return
*/
@RequestMapping("/service/hello")
public String helloFeign();
}
在service层@FeignClient注解中指定回调类-fallback:@FeignClient(name=“01-SPRINGCLOUD-SERVICE-PROVIDER”, /fallback = MyFallback.class/ fallbackFactory = MyFallbackFactory.class)
编写fallback类:
@Component
public class MyFallbackFactory implements FallbackFactory<IHelloFeignService> {
@Override
public IHelloFeignService create(Throwable cause) {
return new IHelloFeignService() {
@Override
public String helloFeign() {
return cause.getMessage();
}
};
}
}
总结
SpringCloud-Feign使得消费者调用远程服务者方法犹如调用一个service层方法,十分简便。在学习中记录每个阶段的学习进度,做好记录,好记性不如烂笔头!感谢你的阅读,希望这篇文章能对你有一点点帮助。我是黑马Jack,一起学习一起进步!