简介
Feign使用Jersey和CXF等工具为ReST或SOAP服务编写Java客户端。此外,Feign允许您在诸如Apache HC之类的http库之上编写自己的代码。Feign通过可自定义的解码器和错误处理功能,以最小的开销和代码将代码连接到http API,可以将其写入任何基于文本的http API。
Feign通过将注释处理为模板化请求来工作。在输出之前,参数以简单的方式应用于这些模板。尽管Feign仅限于支持基于文本的API,但它极大地简化了系统方面,例如重播请求。此外,Feign知道这一点,就可以轻松对转换进行单元测试。
Java版本相容性
Feign 10.x及更高版本建立在Java 8上,并且可以在Java 9、10和11上运行。对于那些需要JDK 6兼容性的应用程序,请使用Feign9.x。
feign相对于ribbon的优点:
1. feign本身里面就包含有了ribbon
2. feign自身是一个声明式的伪http客户端,写起来更加思路清晰和方便
3. fegin是一个采用基于接口的注解的编程方式,更加简便
创建项目:springboot项目创建,选择netflix-eureka-client和openfeign两个依赖即可。
1. 修改启动类,添加@EnableEurekaClient注册中心,开启Feign的功能@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableEurekaClient
//开启Feign的功能
@EnableFeignClients
public class SpringCloudFeignApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudFeignApplication.class, args);
}
}
2. 创建接口,添加注解,@FeignClient(“服务名”)注解,指定要调用的服务“cloud-server”,如下图即为某服务的配置,红框中的即为服务名,接口中的方法请求地址要和我们服务提供方的全部一致即可
//@FeignClient(“服务名”)注解指定要调用的服务
@FeignClient(name = "cloud-server")
@Component
public interface FeignService {
@GetMapping("/getinfo")
String getInfo();
}
3. 请求
@RestController
public class BaseController {
@Autowired
private FeignService feignService;
@GetMapping("/go")
public String callFeignServer(){
return feignService.getInfo();
}
}
4. 配置 application.yml
server:
port: 8090
tomcat:
uri-encoding: utf-8
eureka:
client:
#是否将自己注册到Eureka服务中
register-with-eureka: true
#是否从Eureka服务中获取注册信息
fetch-registry: true
#Eureka注册中心的地址
service-url:
defaultZone: http://127.0.0.1:8761/eureka
spring:
application:
#服务名称
name: cloud-feign
访问 http://localhost:8090/go 即可,会轮训访问