SpringCloud微服务之Eureka添加Ribbon负载均衡

x33g5p2x  于11个月前 转载在 Spring  
字(1.6k)|赞(0)|评价(0)|浏览(91)

注册中心

请参考:https://blog.csdn.net/MadLifeBin/article/details/120332483
可搭建单机版用于 Demo 测试

服务提供与消费

请参考:https://blog.csdn.net/MadLifeBin/article/details/120420139

全链路监控

请参考:https://blog.csdn.net/MadLifeBin/article/details/120445839

总体思路

构建一个注册中心,多个服务提供方(接口返回服务名、端口信息),一个服务消费方,在服务消费侧添加Ribbon负载均衡,测试调用接口时,观察每次响应的服务方的信息。

一. 添加依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

二. 添加配置

ribbon.ConnectTimeout=3000
ribbon.ReadTimeout=30000
http-feign-provider8083.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule

三. 构造场景

1. 服务提供者增加接口

该接口返回当前服务的应用名、端口,方便在服务消费方区别调用了哪个服务

@GetMapping("/loadBalanceDemo/getProviderInfo")
public String getProviderInfo(){
    return "当前Provider-springApplicationName: " + springApplicationName + ",端口为:" + serverPort;
}

2. 服务消费方构建消费链路

@FeignClient(name="http://${env.app.name.loadBalanceDemo}",contextId = "LoadBalanceDemoClient",path = "/loadBalanceDemo")
public interface LoadBalanceDemoClient {
    @GetMapping("/getProviderInfo")
    String getProviderInfo();
}
@GetMapping("/getProviderInfo")
    public String getProviderInfo(){
        return loadBalanceDemoClient.getProviderInfo();
    }

3. 启动服务,联调

注册中心、服务消费各启动一个进程,服务提供方使用命令行指定端口启动多个服务进程,注册到同一个注册中心

java -jar .\http-feign-provider8083.jar --server.port=8086

当前服务消费侧使用的负载均衡算法为 RoundRobinRule 轮询,则在不断刷新接口时,服务provider 的端口会按一定的顺序打印。

四.其他Ribbon负载均衡算法

RoundRobinRule 轮询策略
RandomRule 随机策略
BestAvailableRule 高可用
WeightedResponseTimeRule 响应时间权重

代码参考仓库:
https://gitee.com/pengld-demo/my-spring-cloud-demo

相关文章