Spring Cloud 服務消費(Feign)

在使用 RestTemplate 實現 Rest API 調用的時候,是經過拼接字符串的方式構造 URL,向具體服務實例發起 Http 請求。在定義 RestTemplate 的時候,還能夠增長 @LoadBalanced 註解,在調用服務接口的時候,原來 host 部分是經過手動拼接ip和端口的,如今直接用 服務名 來寫請求路徑。在真正調用的時候,Spring Cloud 會將請求攔截下來,而後經過負載均衡器(如 Ribbon)選出節點,並替換服務名部分爲具體的ip和端口,從而實現基於服務名的負載均衡調用,相關見 Spring Cloud 服務消費(Ribbon)java

以上的方式能夠實現負載均衡調用,可是因爲每一個調用都要拼接 URL,傳遞的參數也須要放在 URL 中,這樣的開發體驗是很很差的,比較低效且難以維護。可使用 Feign 實現聲明式 REST 調用git

Feign 簡介

Feign 是 Netflix 的一套的聲明式服務調用客戶端。它使得編寫Web服務客戶端變得更加簡單。咱們只須要經過建立接口並用註解來配置它便可。它具有可插拔的註解支持,包括Feign註解和JAX-RS註解。支持可插拔編碼器和解碼器。Spring Cloud 對 Feign 進行了加強,擴展了對Spring MVC 註解的支持,並整合了 Ribbon 和 Eureka 來提供均衡負載的 HTTP 客戶端實現。github

使用 Feign

咱們利用以前的例子(見 Spring Cloud 服務消費(Ribbon)),eureka-server 做爲服務註冊中心、product-service 做爲服務提供者,order-service-ribbon 是服務消費者。複製 order-service-ribbonorder-service-feign,在 order-service-feign 上去作一些更改spring

添加 Feign 的依賴app

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

修改啓動類,添加 @EnableFeignClients 註解負載均衡

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderServiceFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceFeignApplication.class, args);
    }
}

建立 Feign 接口,添加 @FeignClient 註解編碼

@FeignClient("product-service")
public interface ProductFeignClient {

    @GetMapping("/product/{id}")
    Product getProduct(@PathVariable Long id);
}

調用 Feign 接口code

@RestController
@Log4j2
public class ProductController {

    @Autowired
    private ProductFeignClient productFeignClient;

    @GetMapping("/product/{id}")
    public Product getProduct(@PathVariable Long id) {
        return productFeignClient.getProduct(id);
    }
}

啓動 eureka-server、product-service:807一、product-service:807二、order-service-feign,訪問 http://localhost:8081/product/1 能夠查看結果server


示例代碼:demoxml

相關文章
相關標籤/搜索