Spring Cloud负载均衡(二)

简介: Netflix Ribbon 整合Eureka激活服务发现的客户端@EnableDiscoveryClientpackage com.example.springcloudlesson6;import org.

Netflix Ribbon 整合Eureka

  • 激活服务发现的客户端
    @EnableDiscoveryClient
package com.example.springcloudlesson6;

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.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@RibbonClients({
        @RibbonClient(name = "spring-cloud-service-provider")
})
@EnableDiscoveryClient
public class SpringCloudLesson6Application {

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

    //声明RestTemplate
    @LoadBalanced//RestTemplate的行为变化
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

创建并且启动Eureka Server

spring-cloud-lesson-6-eureka-server为例
1.激活@EnableEurekaServer

package com.example.springcloudlesson6eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudLesson6EurekaServerApplication {

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

}

2.配置Eureka服务器,在application.properties


##定义应用名称
spring.application.name=spring-cloud-eureka-server
##配置端口
server.port=10000
##取消向注册中心注册
eureka.client.register-with-eureka=false
##取消向注册中心获取注册信息,实例信息
eureka.client.fetch-registry=false
##解决Peer/集群连接问题
eureka.instance.hostname=localhost
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

3.启动Eureka Server

调整Ribbon客户端

1.调整application.properties配置文件



##服务提供方
spring.application.name=spring-cloud-ribbon-client

##服务端口
server.port=8080
##关闭注册
#eureka.client.enabled=false

##连接 Eureka Server url
eureka.client.service-url.defaultZone=http://localhost:10000/eureka/

##服务提供方主机
service-provider.host=localhost
##提供方端口
service-provider.port=9090

service-provider.name=spring-cloud-service-provider

###配置服务提供方的ribbon
spring-cloud-service-provider.ribbon.listOfServers=\
  http://${service-provider.host}:${service-provider.port}

服务提供方调整,并且连接 Eureka Server

1.修改application.properties


##服务提供方
spring.application.name=spring-cloud-service-provider

##服务端口
server.port=9090
##关闭注册
#eureka.client.enabled=false
##连接Eureka Server
eureka.client.service-url.defaultZone=http://localhost:10000/eureka/

在启动两台 服务提供方实例
--server=9091
--server=9092
d1

负载均衡示意图

d2

程序界面示意图

d3

通过刷新重连后的结论为,三个服务器的权重是一致的,是以轮询的方式进行连接

Netflix Ribbon核心接口

  • 实际请求客户端
    LoadBalancerClient

RibbonLoadBalancerClient

  • 负载均衡上下文
    LoadBalancerContext

RibbonLoadBalancerContext

负载均衡器

ILoadBalancer
  • BaseLoadBalancer
  • DynamicServerListLoadBalancer
  • ZoneAwareLoadBalancer
  • NoOploadBalancer

规则接口

IRule
  • 随机规则:RandomRule
  • 最可用原则:BestAvailableRule
  • 轮训规则:RoundRobinRule (默认情况)
  • 重试实现:RetryRule
IRule
  • 客户端配置:ClientConfigEnabledRoundRobinRule
  • 可用性过滤规则:AvailabilityFilteringRule
  • RT权重规则:WeightedResponseTimeRule
  • 规避区域规则: ZoneAvoidanceRule

PING策略

IPingStrategy

  • NoOpPing (默认情况)
  • DummyPing
  • PingConstant
  • pingUrl
  • NIWSDiscoveryPing
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1月前
|
负载均衡 Java API
Spring Cloud 面试题及答案整理,最新面试题
Spring Cloud 面试题及答案整理,最新面试题
138 1
|
1月前
|
Java Nacos Sentinel
Spring Cloud Alibaba 面试题及答案整理,最新面试题
Spring Cloud Alibaba 面试题及答案整理,最新面试题
208 0
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
155 0
|
1天前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
1天前
|
负载均衡 算法
SpringCloud&Ribbon负载均衡原理与实践
SpringCloud&Ribbon负载均衡原理与实践
10 3
|
2天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
12 0
|
2天前
|
监控 Java 微服务
第八章 Spring Cloud 之 Hystrix
第八章 Spring Cloud 之 Hystrix
|
2天前
|
监控 Java API
第七章 Spring Cloud 之 GateWay
第七章 Spring Cloud 之 GateWay
|
2天前
|
负载均衡 前端开发 Java
第六章 Spring Cloud 之 OpenFeign
第六章 Spring Cloud 之 OpenFeign
|
2天前
|
消息中间件 Java Nacos
第三章 Spring Cloud简介
第三章 Spring Cloud简介