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)

大家都在看

  • 【设计模式】汉堡中的设计模式——策略模式

    【设计模式】汉堡中的设计模式——策略模式 【设计模式】汉堡中的设计模式——策略模式 每章一句 前言 情景带入 开始分析 策略模式 尝试编码 如果我要新添加一种形式呢? 策略模式的优…

    Java 2023年6月5日
    077
  • Win10搭建Jenkins部署Java项目(本机和远程Win10部署)

    一、前言&背景 二、环境准备 三、插件安装 四、全局配置 Maven JDK Git Maven 五、新建项目并配置 新建项目 配置 1、Discard old build…

    Java 2023年6月9日
    0110
  • lua 源码分析之线程对象lua_State

    lua_State 中放的是 lua 虚拟机中的环境表、注册表、运行堆栈、虚拟机的上下文等数据。 从一个主线程(特指 lua 虚拟机中的线程,即 coroutine)中创建出来的新…

    Java 2023年5月30日
    081
  • Spring 框架的设计理念与设计模式分析

    Spring 作为现在最优秀的框架之一,已被广泛的使用,并且有很多对其分析的文章。本文将从另外一个视角试图剖析出 Spring 框架的作者设计 Spring 框架的骨骼架构的设计理…

    Java 2023年5月30日
    062
  • python 读取ini配置文件,csv读取,mongodb

    [main.py] #! /usr/bin/python -*- coding: utf-8 -*- import configparser import csv import t…

    Java 2023年6月16日
    095
  • java8 lambda操作

    package com.simon.java8; import java.util.*; import java.util.stream.Collectors; public cl…

    Java 2023年5月29日
    077
  • 同步锁笔记

    CAS(Compare and Set) 无锁算法,不使用锁的情况下实现多线程之间的变量同步,拿变量的原值和内存中的值进行比较,如果相同,则原值没有被修改过,那么就将原值修改为新值…

    Java 2023年6月7日
    064
  • java代码编译得到smali代码

    首先用Sublime(其他文本编辑器也可)编写一个java类 第二步:使用javac命令编译java文件得到class文件 javac是JDK自带的 第三步:使用jar命令编译cl…

    Java 2023年5月29日
    070
  • [Java]HashMap与ConcurrentHashMap的一些总结

    HashMap底层数据结构 JDK7:数组+链表 JDK8:数组+链表+红黑树 JDK8中的HashMap什么时候将链表转为红黑树? 当发现链表中的元素大于8之后,判断当前数组长度…

    Java 2023年6月5日
    069
  • 1.某公司笔试SQL题

    1.用一条SQL语句查询出每门课都大于80分的学生姓名 name kecheng fenshu 大狗子 语文 81 大狗子 数学 75 二狗子 语文 76 二狗子 数学 90 小狗…

    Java 2023年6月9日
    099
  • HashSet 添加/遍历元素源码分析

    分析 HashSet、HashMap 底层 添加、遍历 元素的机制,追踪并分析源码 HashSet 类图 HashSet 简单说明 HashSet 实现了 Set 接口 HashS…

    Java 2023年6月6日
    070
  • 白话电子签章原理及风险

    因为业务需要近来在对接一个线上的电子签章平台, 签完的效果就是在PDF上盖一个红色的章。内部过程沟通中发现,对这个红色章背后的证明逻辑,技术原理,能够了解的比较清楚的人还是很少的。…

    Java 2023年6月15日
    088
  • 企业微信会话存档消息解密(Java RSA PKCS1解密)

    https://www.cnblogs.com/eleclsc/p/12082000.html 转:https://www.cnblogs.com/zengsf/p/1013688…

    Java 2023年5月29日
    060
  • JavaScript

    什么是JavaScript 一、概述 JavaScript是一门世界上最流行的脚本语言 一个合格的后端人员,必须要精通JavaScript 快速入门 一、引入JavaScript …

    Java 2023年6月6日
    0116
  • 数组

    学习笔记——Java基础 数组 解决 : 将数据进行 存储 —-》引入∶数组 数组的作用 : 数组用来存储数据的,在程序设计中,为了处理方便,数组用来将相同类型的若干数…

    Java 2023年6月5日
    049
  • Kakfa系列丛书推荐之《深入理解Kafka:核心设计与实践原理》

    pdf格式文档下载见下文 编者推荐 本书从Kafka的基本概念入手,主要从生产端、消费端、服务端等3个方面进行全面的陈述,主要内容包括Kafka的基本使用方式、生产者客户端的使用、…

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