Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。 它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。
1、续上一篇,启动注册中心eureka-server 端口8761、一个客户端应用2个实例,端口为8762和8763
2、创建feign
新建springboot应用,导入相关pom依赖,如下所示:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>
<dependencies>
<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>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
修改yml文件,将应用注册到eureka中,如下:
spring:
application:
name: service-feign
server:
port: 8765
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
在启动类上,增加feign客户端注解,开启feign功能:
@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients
public class SericefeignApplication {
public static void main(String[] args) {
SpringApplication.run(SericefeignApplication.class, args);
}
}
定义一个service接口,指定调用具体服务、具体接口:
@FeignClient(value = "DemoApp")
public interface ServiceSayHi {
@RequestMapping(value = "/sayHi",method = RequestMethod.GET)
String sayHiFromClient(@RequestParam(value = "name") String name);
}
其中DemoApp表示需要调用的应用服务,该应用服务已注册到注册中心,sayHi是需要调用的接口
编写Controller进行调用测试:
@RestController
public class HiController {
@Autowired
private ServiceSayHi serviceSayHi;
@RequestMapping("/sayHi")
public String sayHi(@RequestParam String name){
return serviceSayHi.sayHiFromClient(name);
}
}
访问http://localhost:8764/sayHi?name=张三
结果为:
再次刷新,结果为:
多次刷新,发现,端口号在8762和8763之间不断交替变化,说明feign发挥了作用。