1. 程式人生 > >第三篇:SpringCloud之服務消費(Feign)

第三篇:SpringCloud之服務消費(Feign)

上一篇文章,講述瞭如何通過RestTemplate+Ribbon去消費服務,這篇文章主要講述如何通過Feign去消費服務。

Feign簡介

Feign是一種宣告式、模板化的HTTP客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要建立一個介面並註解。它具有可插拔的註解特性,可使用Feign註解和JAX-RS註解。Feign支援可插拔的編碼器和解碼器。Feign預設集成了Ribbon,並和Eureka結合,預設實現了負載均衡的效果。

簡而言之:

  • Feign 採用的是基於介面的註解
  • Feign 整合了ribbon

服務提供

這一篇文章基於上一篇文章的工程,啟動sso-server,埠為8088; 啟動serviceA兩次,埠分別為8089、8090。

建立Feign服務

建一個服務消費者工程,取名為:service-feign
pom.xml檔案為

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <artifactId>springboot-feign</artifactId> <groupId>com.chenjay.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion
>
4.0.0</modelVersion> <artifactId>sso-feign</artifactId> </project>

在父工程的pom檔案中加入pring-cloud-starter-feign依賴

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

在工程的配置檔案指定服務的註冊中心地址為http://localhost:8088/eureka/,程式名稱為 service-feign,程式埠為8091。配置檔案application.yml如下:

server:
  port: 8091

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8088/eureka/

spring:
  application:
    name: service-feign

在程式的啟動類ConsumerApplication ,加上@EnableFeignClients註解開啟Feign的功能:

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

定義一個feign介面,通過@ FeignClient(“服務名”),來指定呼叫哪個服務。比如在程式碼中呼叫了serviceA服務的“/hello”介面,程式碼如下:

@FeignClient(value = "serviceA")
public interface SchedualServiceHello {
    @GetMapping(value = "/hello")
    String sayHiFromClientOne(@RequestParam(value = "name") String name);
}

在Web層的controller層,對外暴露一個"/hello"的API介面,通過上面定義的Feign客戶端SchedualServiceHi 來消費服務。程式碼如下

@RestController
public class HelloController {

    @Autowired
    SchedualServiceHello schedualServiceHello;
    @GetMapping(value = "/hello")
    public String Hello(@RequestParam String name){
        return schedualServiceHello.sayHiFromClientOne(name);
    }
}

測試

啟動程式,多次訪問http://localhost:8091/hello?name=lucy,瀏覽器交替顯示:
在這裡插入圖片描述
在這裡插入圖片描述

原始碼下載:https://github.com/chenjary/SpringCloud/tree/master/springcloud-feign