spring-cloud-alibaba2.2.x 遠程調用負載均衡openfeign搭建使用
文章目錄
本地項目的基礎環境
環境 | 版本 |
---|---|
jdk | 1.8.0_201 |
maven | 3.6.0 |
Spring-boot | 2.2.4.RELEASE |
Spring-cloud-alibaba | 2.2.1.RELEASE |
Spring-cloud | Hoxton.SR2 |
構建本項目之前,請詳細參看如下步驟,如果已經搭建好,略過即可;
項目地址的碼雲的git地址https://gitee.com/liqi01/badger-spring-cloud-alibaba.git
《spring-cloud-alibaba.2.2.x 服務註冊與發現nacos簡介以及環境搭建》
《spring-cloud-alibaba2.2.x 遠程調用負載均衡ribbon搭建使用》
在使用的spring-cloud-starter-openfeign
的時候,我特地去spring-cloud-alibaba-dependencies
這個父級的pom文件下,看了下;並沒有引入對應的依賴包;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
所以在使用過程中,還是需要先引入springcloud的父級pom,然後再導入對應的openfeign的依賴;openfeign、hystrix、zuul、gateway等,在使用上更接近於切換一個服務註冊中心,把eureka切換到nacos上;所有在後面的關於服務網關上的,nacos上整合,就不在重複介紹,大家可以參看springcloud裏的對網關的介紹和案例;
1.badger-spring-cloud-alibaba-consumer-openfeign。服務的消費者open feign的項目搭建
1.1、maven的pom文件如下,就是一個普通的web的springboot項目,加入了nacos的nacos-discovery
包以及openfeign
的包
<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.2.4.RELEASE</version>
</parent>
<groupId>com.badger</groupId>
<artifactId>badger-spring-cloud-alibaba-consumer-openfeign</artifactId>
<name>badger-spring-cloud-alibaba-consumer-openfeign</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<spring-cloud.version>Hoxton.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
<finalName>badger-spring-cloud-alibaba-consumer-openfeign</finalName>
</build>
<description>服務消費者</description>
</project>
1.2、yaml配置文件如下,基礎配置
server:
port: 7200
spring:
application:
name: badger-spring-cloud-alibaba-consumer-openfeign
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: '*'
1.3、@FeignClient
聲明式接口代碼
/**
* feign接口 指定調用哪個接口
* 註解:@FeignClient 標註爲feign接口 value 指向調用的模塊名
* spring boot 2.0 只有一個服務端(value = "同一個名字"),只能寫一個註解,
* 可以使用contextId 作爲區分,而寫多個@FeignClient
* @author liqi ,
*/
@FeignClient(value = "badger-spring-cloud-alibaba-provider")
public interface DemoFeignApi {
@GetMapping("/demo")
String demo();
}
1.4、主啓動類、以及業務類
/**
* @EnableDiscoveryClient 開啓服務註冊和發現
* @EnableFeignClients 開啓feign的客戶端
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OpenFeignConsumerApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(OpenFeignConsumerApplication.class, args);
}
@RestController
public class DemoController {
@Autowired
DemoFeignApi api;
@GetMapping("/feign/demo")
public String demo() {
return api.demo();
}
}
}
2、項目啓動,測試使用
啓動步驟如下:
- 啓動nacos的服務,端口8848;
- 修改yaml的配置文件,啓動端口爲7000,啓動服務的提供者badger-spring-cloud-alibaba-provider;
- 修改yaml的配置文件,啓動端口爲7001,啓動服務的提供者badger-spring-cloud-alibaba-provider;
- 啓動服務的消費者badger-spring-cloud-alibaba-consumer-openfeign,端口爲7200;
這裏爲了測試負載均衡,我們使用不同的端口(7000,7001)啓動了兩份badger-spring-cloud-alibaba-provider應用;通過nacos的頁面,也可以看到具體的服務
調用openfeign的服務 http://localhost:7200/feign/demo
持續調用,會發現業務上的端口,有順序的改變;這個也是默認的負載均衡算法生效了;以及遠程調用badger-spring-cloud-alibaba-provider成功了。
我的地址是-->172.16.2.54:7000
我的地址是-->172.16.2.54:7001
3、負責均衡算法切換
由於openfeign是基於ribbon的,負責均衡算法切換上,參考
《spring boot 2.x spring cloud Greenwich.SR1 負載均衡ribbon搭建使用》;
《spring boot 2.x spring cloud Greenwich.SR1 負載均衡ribbon自動裝配,負載均衡部分源碼解析》;