IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> spring cloud 2021.0.2 LoadBalancer 配置负载均衡策略问题 -> 正文阅读

[Java知识库]spring cloud 2021.0.2 LoadBalancer 配置负载均衡策略问题

第一步:创建配置类

这个类不要加? @Configuration 注解,或者把这个配置类放在启动类外面的包,@SpringBootApplication 包的外面。下面以nacos提供的根据权重的负载均衡策略配置为例。

官方说明:Cloud Native Applications

The classes you pass as?@LoadBalancerClient?or?@LoadBalancerClients?configuration arguments should either not be annotated with?@Configuration?or be outside component scan scope.
package com.myitsite.orderservice.conifg;

import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;


public class MyLoadBalancerConfig {

    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;

    //自定义loadBlancer负载均衡策略
    @Bean
    public ReactorServiceInstanceLoadBalancer reactorServiceInstanceLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);

        //返回随机轮询负载均衡方式
        //return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name)

        //返回加权随机轮询负载均衡方式
        //return new RoundRobinLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);

        //nacos服务注册中心权重的负载均衡策略
        return new NacosLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name,nacosDiscoveryProperties);
    }
}

第二步:启动类上配置服务使用的负载均衡策略?

第一种情况:针对这个版本,如果配置类在扫描包里面加上@Configuration时,使用到的服务必须都在启动类上配置@LoadBalancerClients,没有配置的服务,调用会报错。

//假设项目中使用了2个服务,stock-service和product-service

//都配置好不会报错
@LoadBalancerClients(value = {
        @LoadBalancerClient(name = "stock-services",configuration = MyLoadBalancerConfig.class),
        @LoadBalancerClient(name = "product-service",configuration = MyLoadBalancerConfig.class)
})

//调用stock-service不会报错,调用product-service会报错
@LoadBalancerClients(value = {
        @LoadBalancerClient(name = "stock-services",configuration = MyLoadBalancerConfig.class)
})

第二种情况(推荐):针对这个版本,如果配置类在扫描包里面不加@Configuration时,启动类上配置@LoadBalancerClients,服务配置了负载均衡策略则使用配置好的策略,没配置的使用LoadBalancer默认的负载均衡策略。

第三种情况(推荐):针对这个版本,如果配置类在扫描包外面加或者不加@Configuration都不影响,启动类上配置@LoadBalancerClients,服务配置了负载均衡策略则使用配置好的策略,没配置的使用LoadBalancer默认的负载均衡策略。

如果要自定义负载均衡策略,请参考别人的的文章:Spring Cloud Loadbalancer源码解析和自定义负载均衡策略实现 - 知乎

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-26 15:14:28  更:2022-05-26 15:15:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:39:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码