Springboot 实践(19)负载平衡配置与运用

        前文Springboot 实践(1)至Springboot 实践(18),我们分别讲解了springboot数据源配置、swagger-ui测试controller、整合security、整合Oauth2.0、服务注册、路由配置以及配置中心等单例功能开发,实现了各个系统之间的接口访问;在实际项目运用中,是如何解决在线用过大、负载过重问题呢?此文中我们引入负载均衡的概念,负载的轮询调用。

        首先我们开启consul服务注册服务端,然后利用MyEclipse2019建立两个工程,分别命名为Springboot-LoadBalance-producer1、Springboot-LoadBalance-producer2、两个工程配置相同的spring.application.name=mango-producer,同时,consul注册使用cld:

Consul.discovery.serviceName: ${spring.application.name}名称。

一、创建Springboot-LoadBalance-producer1项目

1、pom.xml文件,添加jar包

       

            org.springframework.boot

            spring-boot-starter-web

       

       

       

            io.springfox

            springfox-swagger2

            2.9.2

       

       

            io.springfox

            springfox-swagger-ui

            2.9.2

       

       

      

            de.codecentric

            spring-boot-admin-starter-client

            2.0.4

       

       

       

            org.springframework.cloud

            spring-cloud-starter-consul-discovery

       

       

       

            org.springframework.boot

            spring-boot-starter-test

            test

       

2、application.yml配置

        配置端口使用8003,应用名称为mango-producer

server:

  port: 8003

spring:

  application:

    name: mango-producer

  cloud:

    consul:

      host: localhost

      port: 8500

      discovery:

        serviceName: ${spring.application.name} # 注册到consul的服务名称

  boot:

    admin:

      client:

        url: "http://localhost:8000"

# 开放健康检查接口

management:

  endpoints:

    web:

      exposure:

        include: "*"

  endpoint:

    health:

      show-details: ALWAYS

3、添加启动函数

@EnableDiscoveryClient

@SpringBootApplication

public class MangoProducerApplication {

public static void main(String[] args) {

        SpringApplication.run(MangoProducerApplication.class, args);

    }

}

4、添加controller

@RestController

public class HelloController {

    @RequestMapping("/hello")

    public String hello() {

        return "hello Mango !";

    }

}

5、启动项目,观察consul用户界面,如下图所示;此时mango-producer应用只有一个实例即“1 instance”。

Springboot 实践(19)负载平衡配置与运用_第1张图片

二、创建Springboot-LoadBalance-producer2项目

        拷贝Springboot-LoadBalance-producer1项目,项目名称依旧使用“mango-producer”,项目端口号改为“8004”,controller改成 return “hello Mango2”,启动项目,观察consul用户界面,如下图所示:此时mango-producer应用只有liangge个实例即“2 instance”。

Springboot 实践(19)负载平衡配置与运用_第2张图片

三、创建消费者工程,命名为Springboot-LoadBalance-consumer项目

        拷贝Springboot-LoadBalance-producer1项目,项目名称改为“mango-consumer”,项目端口号改为“8005”,添加controller如下:

@RestController

public class ServiceController {

    @Autowired

    private LoadBalancerClient loadBalancerClient;

    @Autowired

    private DiscoveryClient discoveryClient;

   /**

     * 获取所有服务

     */

    @RequestMapping("/services")

    public Object services() {

        return discoveryClient.getInstances("mango-producer");

    }

    /**

     * 从所有服务中选择一个服务(轮询)

     */

    @RequestMapping("/discover")

    public Object discover() {

        return loadBalancerClient.choose("mango-producer").getUri().toString();

    }

}

启动项目,观察consul用户界面,如下图所示:

Springboot 实践(19)负载平衡配置与运用_第3张图片

四、测试

        在浏览器中数据discover访问地址,先后两次分别访问8003、8004接口,是因为默认的负载均衡loadBalancerClient采用轮询方式。

你可能感兴趣的:(spring,boot,java,后端,负载均衡)