Spring Cloud负载均衡(二)

  1. 云栖社区>
  2. 博客>
  3. 正文

Spring Cloud负载均衡(二)

xiaoshuaiv5 2019-03-23 22:59:59 浏览557
展开阅读全文

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

网友评论

登录后评论
0/500
评论
xiaoshuaiv5
+ 关注