Feign是一个声明式的Web服务客户端。
是什么?
例如我在一个服务的interace上注解@FeignClient(value = “eureka-client”)
就是声明服务名称 告诉其他服务等这个就是eureka-client 的服务客户端
它使编写Web服务客户端变得更容易
要使用Feign,请创建接口并注解,有可插入的注解支持,包括Feign注释和JAX-RS注释。
JAX-RS注释:JAX-RS是JAVAEE6 引入的,JAX-RS即Java API for RESTful Web Services
是Java的应用程序接口,如:
@Path标注资源类或方法的相对路径
@GET,@PUT,@POST,@DELETE 请求方式
Feign还支持可插拔编码器和解码器。
Spring Cloud Netflix 为 Feign提供了下面默认的配置Bean
Decoder feignDecoder: ResponseEntityDecoder
Encoder feignEncoder: SpringEncoder
Spring Cloud增加了对Spring MVC注释的支持
并使用了Spring Web中默认使用的相同HttpMessageConverters。
Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载均衡的http客户端。
白话文:微服务架构端口很多,我们要统一端口就要用到Feign去各个服务拿接口;需要从一个服务调用另外一个服务的数据也可以直接使用Feign,也就是通过这种方式开发调用远程服务就像是调用本地服务一样方便。
准备工作
- 环境
- IDEA 2018.3
- Gradle 4.10
- springCloudVersion Finchley.RELEASE
- 无eureka-server的可以去github下载源码:https://github.com/cuifuan/springcloud-tools
- 创建的是子项目,父项目Github下载
创建eureka-client服务
gradle配置 build.gradle
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation project(":tools-common-entity")
}
创建启动类 ToolsEurekaClientApplication.java
package store.zabbix.toolseurekaclient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ToolsEurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(ToolsEurekaClientApplication.class, args);
}
@Value("${server.port}")
private int port;
@GetMapping