spring-cloud-alibaba2.2.x 远程调用负载均衡openfeign搭建使用

spring-cloud-alibaba2.2.x 远程调用负载均衡openfeign搭建使用

文章目录

  • spring-cloud-alibaba2.2.x 远程调用负载均衡openfeign搭建使用
    • 1.badger-spring-cloud-alibaba-consumer-openfeign。服务的消费者open feign的项目搭建
      • 1.1、maven的pom文件如下,就是一个普通的web的springboot项目,加入了nacos的`nacos-discovery`包以及`openfeign`的包
      • 1.2、yaml配置文件如下,基础配置
      • 1.3、`@FeignClient`声明式接口代码
      • 1.4、主启动类、以及业务类
    • 2、项目启动,测试使用
    • 3、负责均衡算法切换

本地项目的基础环境

环境 版本
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.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        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.0modelVersion>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.2.4.RELEASEversion>
    parent>
    <groupId>com.badgergroupId>
    <artifactId>badger-spring-cloud-alibaba-consumer-openfeignartifactId>
    <name>badger-spring-cloud-alibaba-consumer-openfeignname>
    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <java.version>1.8java.version>
        <maven-jar-plugin.version>3.1.1maven-jar-plugin.version>
        <spring-cloud.version>Hoxton.SR2spring-cloud.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
    dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>2.2.1.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring-cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>
    <build>
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
        <finalName>badger-spring-cloud-alibaba-consumer-openfeignfinalName>
    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的页面,也可以看到具体的服务

spring-cloud-alibaba2.2.x 远程调用负载均衡openfeign搭建使用_第1张图片

调用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自动装配,负载均衡部分源码解析》;

你可能感兴趣的:(spring-cloud-alibaba2.2.x 远程调用负载均衡openfeign搭建使用)