上一篇文章,讲述了如何通过RestTemplate+Ribbon去消费服务,这篇文章主要讲述如何通过Feign去消费服务。
Feign简介
Feign是一种声明式、模板化的HTTP客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
简而言之:
- Feign 采用的是基于接口的注解
- Feign 整合了ribbon
服务提供
这一篇文章基于上一篇文章的工程,启动sso-server,端口为8088; 启动serviceA两次,端口分别为8089、8090。
创建Feign服务
建一个服务消费者工程,取名为:service-feign
pom.xml文件为
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot-feign</artifactId>
<groupId>com.chenjay.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sso-feign</artifactId>
</project>
在父工程的pom文件中加入pring-cloud-starter-feign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
在工程的配置文件指定服务的注册中心地址为http://localhost:8088/eureka/,程序名称为 service-feign,程序端口为8091。配置文件application.yml如下:
server:
port: 8091
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8088/eureka/
spring:
application:
name: service-feign
在程序的启动类ConsumerApplication ,加上@EnableFeignClients注解开启Feign的功能:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了serviceA服务的“/hello”接口,代码如下:
@FeignClient(value = "serviceA")
public interface SchedualServiceHello {
@GetMapping(value = "/hello")
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}
在Web层的controller层,对外暴露一个"/hello"的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下
@RestController
public class HelloController {
@Autowired
SchedualServiceHello schedualServiceHello;
@GetMapping(value = "/hello")
public String Hello(@RequestParam String name){
return schedualServiceHello.sayHiFromClientOne(name);
}
}
测试
启动程序,多次访问http://localhost:8091/hello?name=lucy,浏览器交替显示:
源码下载:https://github.com/chenjary/SpringCloud/tree/master/springcloud-feign