SpringCloud入門學習(整合Feign實現服務調用篇)

SpringCloud入門學習(整合Feign實現服務調用篇)

本篇將在 上一篇 的基礎上,介紹SpringCloud整合Feign實現服務間的相互調用。

最近比較忙,所以一致沒有更新…

一 新建服務04,該服務會通過Feign調用其他服務
  1. 添加新的依賴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>

  1. 啓動類添加註解
@SpringBootApplication
@EnableEurekaClient     //表示我是一個服務
@EnableFeignClients     //表示我可以調用其他服務,如果一個服務想要調用其他服務,則必須加上此註解
public class Microservice04Application {

	public static void main(String[] args) {
		SpringApplication.run(Microservice04Application.class, args);
	}
}
  1. 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默認整合了負載均衡,所以接下來,我還會再簡單演示一下負載均衡的效果。

  1. 負載均衡的前提是需要有多個相同的服務,也就是所謂的服務集羣。所以,我會再工程複製一份服01,複製的服務01和服務01的唯一區別就在於端口不一樣,以及返回內容不一樣,這是爲了區分我們調用的是哪個服務。
  2. 啓動所有項目,打開註冊中心,可以看到如下頁面:
    在這裏插入圖片描述

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實現網關服務

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