Spring Cloud【Finchley.RELEASE版本】微服务(三)使用feign消费服务
准备
新建一个spring boot项目,命名为eureka-consumer-feign,spring boot版本为2.0.3,spring cloud版本为Finchley.RELEASE。
引入依赖
<dependencies>
<!--引入ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!--引入feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<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.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
application.properties配置
和之前几篇的配置大同小异:
spring.application.name=eureka-consumer-feign
server.port=2103
eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
启动类添加注解@EnableFeignClients
在启动类上加入@EnableFeignClients注解:
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
特别注意:
引入的依赖一定要正确,spring cloud 的Finchley.RELEASE版本引入feign依赖的是spring-cloud-starter-openfeign,如果引用spring-cloud-starter-feign,会导致启动类上的@EnableFeignClients提示报错,找不到相应的依赖。
编写feign调用客户端代码
name 指调用的服务提供者的服务名,。除此之外还有value,fallback等参数可选,后续用到再讲。这里配置完之后,我们在调用别的服务时,就可以像调用本地方法一样简单了。不仅如此,feign集合了Hystrix断路器,以及ribbon的负载均衡功能。
@org.springframework.cloud.openfeign.FeignClient(name ="eureka-client")
public interface FeignClient {
@GetMapping("/clientTest")
public String consumer();
}
测试Controller编写
暴露接口,测试调用eureka-client提供的服务。
@RestController
public class TestController {
@Autowired
FeignClient feignClient;
@GetMapping("/consumer")
public String testConsumer() {
return feignClient.consumer();
}
}
测试调用服务
我们依次启动eureka-client,eureka-server,eureka-consumer-feign,再访问:http://localhost:2103/consumer,可以看到服务也成功的被调用了。