1. 程式人生 > 程式設計 >SpringCloud (GreenwichR2) 第二章 Feign 整合 附原始碼

SpringCloud (GreenwichR2) 第二章 Feign 整合 附原始碼

官方檔案 

cloud.spring.io/spring-clou…

簡介

      Feign是一個宣告性web服務客戶端。它使編寫web服務客戶端變得更容易。使用feign建立一個介面並對其進行註釋。它有可插入的註釋支援,包括外部註釋和jax-rs註釋。feign還支援可插入的編碼器和解碼器。spring cloud增加了對spring mvc註釋的支援,以及對使用spring web中預設使用的httpMessageConverter的支援。spring cloud集成了ribbon和eureka,在使用feign時提供了一個負載平衡的http客戶端-----來自官方翻譯。

     其實Feign框架就是,

上一章第五節服務消費者使用的一個工具,主要做的事情就是幫助服務消費者查詢和呼叫服務。

下面我分三步走

  • 建立一個服務消費者,增加OpenFeign框架,呼叫服務服務提供者的服務。
  • 構建兩個相同的服務提供者,在一個服務消費者使用OpenFeign框架,返回介面檢視效果。
  • OpenFeign的相關配置案例實現


一.整合OpenFeign框架,走通http請求

     我們在上一章基礎上建立一個服務消費者,步驟和上一章第五節類似,就是多了OpenFeign框架依賴。

    選中scloud專案,右擊 New - Module - Spring Initializr


   next


  next


修改模組的pom檔案

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--繼承自主工程-->
    <parent>
        <artifactId>scloud</artifactId>
        <groupId>com.cool</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <groupId>com.cool</groupId>
    <artifactId>eureka_consumer_openfeign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka_consumer_openfeign</name>
    <description>Demo project for
Spring Boot</description> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>複製程式碼

在啟動檔案中增加 @EnableFeignClients 和 @EnableEurekaClient 註解

@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient
public class EurekaConsumerOpenfeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumerOpenfeignApplication.class,args);
    }
}複製程式碼

修改 application.properties 檔案

#埠號
server.port=8669
# 需要指明spring.application.name 這個很重要
# 這在以後的服務與服務之間相互呼叫一般都是根據這個
spring.application.name=eureka-openfeign
#服務註冊中心例項的主機名
eureka.instance.hostname=localhost
#服務註冊中心埠號
eureka.port=8666
#在此指定服務註冊中心地址
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${eureka.port}/eureka/複製程式碼

至此配置已經完成,下面我們根據上面介紹,建立一個介面和一個Restful api進行測試下吧。

    建立一個介面

@Component
@FeignClient(value = "eureka-client") // 這裡eureka-client 即是服務提供者spring.application.name 
public interface TestServer {
    @GetMapping(value = "/hello")
    public String sayHello(@RequestParam(value = "name",defaultValue = "gdl") String name);
}
複製程式碼

    建立一個Restful Api

@RestController
@RequestMapping("/test")
public class TestController {
    @Autowired
    TestServer testServer;

    @GetMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name){
        return testServer.sayHello(name);
    }
}
複製程式碼

  現在可以和第一章一樣,先啟動 eureka_server 模組服務,在啟動eureka_client 模組提供服務,最後啟動我們現在配置的服務 訪問 http://localhost:8666 檢視下服務提供者


訪問下 本模組配置Restful 介面 http://localhost:8669/test/sayHello/world 哇!通了~


由此看出Feign扮演的角色,就是查詢和呼叫服務提供者服務。

二.構建兩個相同的服務提供者

    那我就仿照第一章第四節的內容,在建立一個服務提供者就命名eureka_client1吧,下面會給出原始碼,eureka_client1和eureka_client的程式碼沒什麼區別,這裡我就不貼了。

    不一樣的是   eureka_client1 的 application.properties 檔案修改 server.port =8670   

    然後我們啟動 eureka_server 模組服務,在啟動eureka_client1 和  eureka_client 兩個服務提供模組,最後啟動我們現在配置的服務,訪問下 http://localhost:8666 檢視下已註冊的服務

   

   最後啟動本模組配置的Restful 介面 http://localhost:8669/test/sayHello/world 多刷幾下,是不是出現了下面結果。



是不是so easy !

三.宣告性web服務客戶端有哪些配置

  配置這邊暫時留白了,整合專案的時候一個個列出常用的配置,時間寶貴,趕緊研究下一個技術之Gateway,因為有些配置閘道器會處理掉,就不重複敘述了。


原始碼地址 gitee.com/dolan/sclou…

切換到 f_openfeign 分支!!!