Spring Cloud Feign
Spring Cloud Feign是一套基於Netflix Feign實現的聲明式服務調用客戶端。它使得編寫Web服務客戶端變得更加簡單。我們只需要通過創建接口並用注解來配置它既可完成對Web服務接口的綁定。它具備可插拔的注解支持,包括Feign注解、JAX-RS注解。它也支持可插拔的編碼器和解碼器。Spring Cloud Feign還擴展了對Spring MVC注解的支持,同時還整合了Ribbon來提供均衡負載的HTTP客戶端實現。
添加依賴
修改 spring-cloud-consul-consumer 的 pom 文件,添加 feign 依賴。
pom.xml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
修改啟動器
修改啟動器類,添加 @EnableFeignClients 注解開啟掃描Spring Cloud Feign客戶端的功能:
ConsuleConsumerApplication.java
package com.louis.spring.cloud.consul.consumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @EnableFeignClients @SpringBootApplication public class ConsuleConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsuleConsumerApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
添加Feign接口
添加 FeignHelloService 接口, 在類頭添加注解 @FeignClient("service-producer") ,service-producer是要調用的服務名。
添加跟調用目標方法一樣的方法聲明,只需要方法聲明,不需要具體實現,注意跟目標方法定義保持一致。
FeignHelloService.java
package com.louis.spring.cloud.consul.consumer.service; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; @FeignClient("service-producer") public interface FeignHelloService { @RequestMapping("/hello") public String hello(); }
添加控制器
添加 FeignHelloController 控制器,注入 FeignHelloService,就可以像使用本地方法一樣進行調用了。
FeignHelloController.java
package com.louis.spring.cloud.consul.consumer.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.louis.spring.cloud.consul.consumer.service.FeignHelloService; @RestController public class FeignHelloController { @Autowired private FeignHelloService feignHelloService; @RequestMapping("/feign/call") public String call() { // 像調用本地服務一樣 return feignHelloService.hello(); } }
測試效果
啟動成功之后,訪問 http://localhost:8521/feign/call,發現調用成功,且 hello consul 和 hello consul two 結果隨機出現。
這是因為 Feign 是基於 Ribbon 實現負載均衡的,而我們在上一節中配置了 Ribbon 的負載策略為隨機策略。
源碼下載
碼雲:https://gitee.com/liuge1988/spring-cloud-demo.git
作者:朝雨憶輕塵
出處:https://www.cnblogs.com/xifengxiaoma/
版權所有,歡迎轉載,轉載請注明原文作者及出處。