SpringCloud (GreenwichR2) 第二章 Feign 整合 附原始碼
阿新 • • 發佈:2019-12-31
官方檔案
簡介
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 分支!!!