spring-cloud-alibaba2.2.x 遠程調用負載均衡openfeign搭建使用

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、項目啓動,測試使用

啓動步驟如下:

  1. 啓動nacos的服務,端口8848;
  2. 修改yaml的配置文件,啓動端口爲7000,啓動服務的提供者badger-spring-cloud-alibaba-provider;
  3. 修改yaml的配置文件,啓動端口爲7001,啓動服務的提供者badger-spring-cloud-alibaba-provider;
  4. 啓動服務的消費者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自動裝配,負載均衡部分源碼解析》

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