SpringCloud入門學習(整合Feign實現服務調用篇)
本篇將在 上一篇 的基礎上,介紹SpringCloud整合Feign實現服務間的相互調用。
最近比較忙,所以一致沒有更新…
一 新建服務04,該服務會通過Feign調用其他服務
- 添加新的依賴
openfeign
具體我的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>microservice04</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>microservice04</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
- 啓動類添加註解
@SpringBootApplication
@EnableEurekaClient //表示我是一個服務
@EnableFeignClients //表示我可以調用其他服務,如果一個服務想要調用其他服務,則必須加上此註解
public class Microservice04Application {
public static void main(String[] args) {
SpringApplication.run(Microservice04Application.class, args);
}
}
- yml配置文件沒什麼區別,我就不再貼了,關鍵是如何調用。
其實很簡單,聲明接口進行調用
,就和寫普通service層差不多。區別在於接口要聲明註解@FeignClient(value = "要調用的服務名")
。爲了區別,我會新建一個feign包,專門用於調用其他服務。
我這裏只貼出服務04調用服務01的代碼,調用其他服務的代碼也是一樣的,相信看了一個其他的就都會明白:
/**
* 調用服務01式例
*
* @author czj
* @date 2019/6/24 2:44 PM
*/
@FeignClient(value = "MICROSERVICE01") //value表示要調用的服務名,絕不能填錯
public interface MicroService01FeignTest {
@GetMapping("/service01/microService01Test") //此處名字需要和01服務的controller路徑保持一致
String microService01FeignTest(@RequestParam("str") String str); //參數一定一定一定要加@RequestParam註解!!!
}
友情提示:請一定注意看我寫的註釋,否則會有很多坑的,會導致你服務調不通...
ok,到此其實通過Feign調用其他服務的工作就已經完成了,是不是很簡單呢!!!還有一點就是Feign默認整合了負載均衡,所以接下來,我還會再簡單演示一下負載均衡的效果。
- 負載均衡的前提是需要有多個相同的服務,也就是所謂的服務集羣。所以,我會再工程複製一份服01,複製的服務01和服務01的唯一區別就在於端口不一樣,以及返回內容不一樣,這是爲了區分我們調用的是哪個服務。
- 啓動所有項目,打開註冊中心,可以看到如下頁面:
OK,最後,讓我們調用接口看看效果:
可以看到,調用服務01的時候,返回的是服務01Copy。說明負載均衡是ok的,如果你一直調用此接口,則會輪流返回服務01和服務01Copy ~
補充: Feign
除了自帶負載均衡,還自帶了斷路器
,但是默認是關閉的。可以通過配置文件打開:
server:
port: 8084
spring:
application:
name: Microservice04
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
default-zone: http:localhost:8761/eureka/
#feigh自帶斷路器,但是默認是沒有打開的
feign:
hystrix:
enabled: true #打開斷路器
polling-interval-ms: 2000 #刷新間隔
具體使用方式也很簡單:
1.配置文件打開該配置,如上所示;
2.調用服務的時候,@FeignClient(value = "MICROSERVICE01", fallback = FallBackExample.class)
該註解添加fallback
字段,意思是該服務不可用的時候,往哪裏轉跳。
3.轉跳類實現該調用接口,如下:
/**
* 斷路器返回處理
*
* @author czj
* @date 2019/7/2 4:27 PM
*/
@Component
public class FallBackExample implements MicroService01FeignTest {
//服務01不可用的時候,跳轉到這裏~
@Override
public String microService01FeignTest(@RequestParam("str") String str) {
return "服務01不可用 error~" + str;
}
}
ok,此時關閉服務01和服務01Copy,再次調用接口,則會返回跳轉的內容啦~
SpringCloud整合Feign實現服務的簡單調用就介紹到這裏啦!
-> 本篇源碼
下一篇,將介紹 SpringCloud整合Gateway實現網關服務