05-LoadBalancer负载均衡

目前主流的负载方案分为以下两种:

  • 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。
  • 客户端根据自己的请求情况做负载均衡,LoadBalancer、Ribbon 就属于客户端自己做负载均衡。

废话不多少,上代码。

maven依赖配置文件,如下:


    4.0.0

    com.mindasoft
    spring-cloud-loadbalancer-consumer
    0.0.1-SNAPSHOT
    jar

    spring-cloud-loadbalancer-consumer
    Demo project for Spring Boot

        org.springframework.boot
        spring-boot-starter-parent
        2.6.4

        UTF-8
        UTF-8
        1.8
        2021.0.1

            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client

            org.springframework.boot
            spring-boot-starter-web

            org.springframework.boot
            spring-boot-starter-test
            test

                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import

                org.springframework.boot
                spring-boot-maven-plugin

            nexus-aliyun
            Nexus aliyun
            https://maven.aliyun.com/repository/public
            default

                false

                true

            nexus-aliyun
            Nexus aliyun
            https://maven.aliyun.com/repository/public

                false

                true

上面配置文件,我们没有新增LoadBalancer的配置,其实spring-cloud-starter-netflix-eureka-client已经依赖了一个具体实现,在老版本的是Ribbon,新的版本是Spring自己实现的loadbalancer,如下:。


    org.springframework.cloud
    spring-cloud-starter-loadbalancer

所以不需要格外添加配置。

服务配置文件,也可以用yml,如下:

server.port=9003

服务注册中心地址
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/

服务名称
spring.application.name=loadbalancer-customer

服务启动类,如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient // Eureka Discovery Client 标识
@SpringBootApplication
public class LoadBalancerConsumerApplication {

    @Bean
    @LoadBalanced       // 开启负载均衡的功能
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudRibbonConsumerApplication.class, args);
    }
}

上面代码中,@LoadBalanced 注解开启了RestTemplate的负载均衡,具体原理后面深入源码学习时再做了解。这里只需要了解该注解标记后,该http请求会有负载均衡效果。

服务调用,

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * Created by huangmin
 */
@RestController
public class ConsumerController {

    private static final Logger LOGGER = LoggerFactory.getLogger(ConsumerController.class);

    @Autowired
    private RestTemplate restTemplate; // HTTP客户端

    @RequestMapping("/hello")
    public String hello() {
        String providerMsg = restTemplate.getForEntity("http://PROVIDER-SERVICE/hello",
                String.class).getBody();

        return "Hello,I'm Customer! msg from provider :  " + providerMsg;
    }
}

在2020版本之后,已经移出了Ribbon。

Original: https://www.cnblogs.com/mpiter/p/15953192.html
Author: 技术那点事儿
Title: 05-LoadBalancer负载均衡

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581108/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Unity Shader学习笔记】Unity光照-渲染路径

    官方文档:渲染路径 1、简介 需要为每个 Shader 设置正确的渲染路径。 大多数情况下,一个项目只使用一种渲染路径,因此我们可以为整个项目设置渲染时的渲染路径。 Edit -&…

    Java 2023年6月9日
    0118
  • Java中使用java.awt.geom.Point2D进行坐标相关的计算(距离、平方等)

    在Java中需要对坐标点进行一些计算和判断。 比如计算两点之间的距离、距离的平方、两点是否相等、坐标赋值、克隆等。 可以使用Java自带的java.awt.Point2D的相关AP…

    Java 2023年5月29日
    078
  • Spring Cloud系列之Eureka使用详解

    1 简介 Spring Cloud Eureka是 Spring Cloud Netflix项目下的服务治理模块。 Netflix完整的服务治理包括:服务发现(Eureka),断路…

    Java 2023年6月8日
    090
  • JavaSE基础——课程笔记

    1.方法概述 1)定义 方法(method):完成特定功能的代码块 2)优点 ①提高了代码的复用性 ②让代码的逻辑更清晰 2.方法的定义和调用 1)定义 2)调用 3.Debug查…

    Java 2023年6月6日
    070
  • vnpy源码阅读学习(4):自己写一个类似vnpy的UI框架

    自己写一个类似vnpy的界面框架 概述 通过之前3次对vnpy的界面代码的研究,我们去模仿做一个vn.py的大框架。巩固一下PyQt5的学习。 这部分的代码相对来说没有难度和深度,…

    Java 2023年6月7日
    098
  • 惰性初始化

    在上面两个类定义的方法中,有一个很特殊:toString()。每一个非基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你却只有一个对象时,该方法便…

    Java 2023年6月13日
    083
  • 超简单的抖音去水印

    一、前言 抖音去水印方法很简单,以前一直没有去研究,以为搞个去水印还要用到算法去除,直到动手的时候才发现这么简单,不用编程基础都能做。 二、原理与步骤 其实抖音它是有一个隐藏无水印…

    Java 2023年6月7日
    0112
  • Another Redis DeskTop Manager—— Redis 可视化工具

    参考资料 https://github.com/qishibo/AnotherRedisDesktopManager/blob/master/README.zh-CN.md 什么是…

    Java 2023年6月9日
    085
  • IDC:云效产品能力No.1,领跑中国DevOps市场

    近日,全球领先的专业市场调查机构国际数据公司(IDC)发布了《IDC MarketScape:中国 DevOps 平台市场厂商评估,2022》报告。此报告中对中国主流 DevOps…

    Java 2023年6月8日
    088
  • Servlet4.0 Response

    Servlet4.0 Response对象 Response对象封装Server返回Client的所有信息。在HTTP协议中,Server传达给Client信息转换到HTTP He…

    Java 2023年6月15日
    083
  • 灰常管用的两个git命令

    git config –global –unset http.proxy git config –global http.sslVerify “false” ` posted…

    Java 2023年6月15日
    097
  • Centos7下Oracle启动命令

    1、查询挂载历史记录 在root账户下使用一下命令 查看历史使用挂载的那个磁盘 查看挂载&a…

    Java 2023年6月8日
    088
  • Debouncer防抖代码

    Debouncer类 import java.util.concurrent.*; public class Debouncer { private final Scheduled…

    Java 2023年6月6日
    081
  • 数据结构:跳跃链表

    关注公众号,一起交流,微信搜一搜: 潜行前行 什么是跳跃链表 开发时经常使用的平衡数据结构有B数、红黑数,AVL数。但是如果让你实现其中一种,很难,实现起来费时间。而跳跃链表一种基…

    Java 2023年6月5日
    0110
  • 统治地球的冯·诺依曼

    以前计算机专业的同学都会学习一门叫《计算机组成原理》的课程,这门课程主要作用就是扫盲,因为在之前的那个年代,并不是很多人都买得起计算机的,这就导致很多学计算机的同学连计算机的电源开…

    Java 2023年6月7日
    093
  • SpringBoot接口-如何生成接口文档之Swagger技术栈?

    SpringBoot开发Restful接口,有什么API规范吗?如何快速生成API文档呢?Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。通俗的来…

    Java 2023年6月6日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球