第三篇: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章