Spring Cloud Feign是一套基於Netflix Feign實現的聲明式服務調用客戶端。它使得編寫Web服務客戶端變得更加簡單。咱們只須要經過建立接口並用註解來配置它既可完成對Web服務接口的綁定。它具有可插拔的註解支持,包括Feign註解、JAX-RS註解。它也支持可插拔的編碼器和解碼器。Spring Cloud Feign還擴展了對Spring MVC註解的支持,同時還整合了Ribbon來提供均衡負載的HTTP客戶端實現。java
修改 spring-cloud-consul-consumer 的 pom 文件,添加 feign 依賴。git
pom.xmlweb
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
修改啓動器類,添加 @EnableFeignClients 註解開啓掃描Spring Cloud Feign客戶端的功能:spring
ConsuleConsumerApplication.javaapp
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(); } }
添加 FeignHelloService 接口, 在類頭添加註解 @FeignClient("service-producer") ,service-producer是要調用的服務名。負載均衡
添加跟調用目標方法同樣的方法聲明,只須要方法聲明,不須要具體實現,注意跟目標方法定義保持一致。測試
FeignHelloService.javaui
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.javaspa
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/ 版權全部,歡迎轉載,轉載請註明原文做者及出處。