【java、微服务、eureka】Robbon负载均衡

负载均衡流程

1.发起请求

  1. 获取url的服务id

3.拉取服务

4.返回服务列表,如localhost:8081、loclahost:8082

  1. 服务负载均衡

  2. 选择某个服务

  3. 修改url,发起请求

8.轮询到8081

策略

修改方法

方法一:

在application。java文件中添加方法

@Bean

public IRule randomRule(){

return new RandomRule();

}

例如:

java 复制代码
package cn.itcast.order;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

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

    /**
     * Spring Boot中使用RestTemplate,我们通常需要注入它。我们可以通过使用@Bean注解来实现。
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    public IRule randomRule(){
        return new RandomRule();
    }
}

方法二

在xml文件中添加

java 复制代码
userservice:
  ribbon:
    NFLoadBalancerRuLeCLassName: com.netflix.Loadbalancer.RandomRule

轮询(RoundRobinRule)

简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。

随机(RandomRule)

随机选择一个可用的服务器。

AvailabilityFilteringRule

对以下两种服务器进行忽略:

(1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为"短路"状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。

(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的

<clientName>.<clientConfigNameSpace>.Active ConnectionsLimit.

WeightedResponseTimeRule

为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。

ZoneAvoidanceRule

以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。

BestAvailableRule

忽略哪些短路的服务器,并选择并发数较低的服务器。

RetryRule

重试机制的选择逻辑

饥饿加载

饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

java 复制代码
ribbon:
  eager-load:
    clients: userservice
    enabled: true
相关推荐
kk哥889941 分钟前
如何快速掌握JavaSE的核心语法?
java
我是一只小青蛙88842 分钟前
AVL树:平衡二叉搜索树原理与C++实战
java·jvm·面试
周壮1 小时前
01 一探究竟:从架构的演变看微服务化架构
微服务·云原生·架构
浩瀚地学1 小时前
【Java】JDK8的一些新特性
java·开发语言·经验分享·笔记·学习
周壮1 小时前
04 服务治理:Nacos 如何实现微服务服务治理
微服务·云原生·架构
雨落秋垣2 小时前
简单的在宝塔面板的Docker环境中为网站同时启用IPv6支持
云原生·eureka
XXOOXRT2 小时前
基于SpringBoot的加法计算器
java·spring boot·后端·html5
阿崽meitoufa2 小时前
JVM虚拟机:垃圾收集器和判断对象是否存活的算法
java·jvm·算法
我是苏苏3 小时前
C#高级:使用ConcurrentQueue做一个简易进程内通信的消息队列
java·windows·c#