Spring Cloud(三)服务消费者(Feign)

一、Feign简介

Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

可以理解为Feign是一个超级方便的调用Spring-Cloud远程服务的框架/工具,帮助开发者以更少耦合更少代码更快更兼容的方法进行远程服务调用。

  • Feign 采用的是基于接口的注解
  • Feign 整合了ribbon,具有负载均衡的能力
  • 整合了Hystrix,具有熔断的能力 (本文不涉及熔断功能)

二、简单实例

2.1 新建 feign-consumer model

pom文件中添加Feign依赖,同样也是Euraka Client

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.2 修改springboot启动类

添加**@EnableFeignClients**注解

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class FeignConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(FeignConsumerApplication.class, args);
	}
}

2.4 资源文件

指定端口,指定Euraka地址

server.port=8084
spring.application.name=feign-consumer
eureka.client.service-url.defaultZone = http://localhost:8080/eureka/

2.4 添加HelloService接口

@FeignClien 来指定客户端地址,RequestMapping中value指定API请求方法

@FeignClient(value = "eureka-client")
public interface HelloService {

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String hiService();

}

2.5 添加controller

添加对应controller,调用我们刚写的interface。

@RestController
public class HelloController {

    @Autowired
    private HelloService helloService;

    @GetMapping(value = "/hi")
    public String hi() {
        return helloService.hiService();
    }
}

注意: @Autowired编译器将提示报错,无视。 因为这个Bean是在程序启动的时候注入的,编译器感知不到,所以报错。
强迫症可选择关闭代码检测:
Spring Cloud(三)服务消费者(Feign)

三、 Demo

以此启动Euraka Server,Euraka Client (2个不同端口实例),这块类似与上节学习记录Spring Cloud(二)服务消费者(Rest+Ribbon)
启动feign-consumer
浏览器访问:http://localhost:8084/hi
当我们多次访问,浏览器交替显示:(实现负载均衡)

hi ,i am from port:8082
hi ,i am from port:8081

GitHub项目地址:https://github.com/PayneYu/spring-cloud-study