SpringCloud组件(四)ribbon负载均衡

本文详细介绍了Eureka服务发现组件的配置和使用,包括服务提供者和服务消费者的应用配置,以及Eureka Server的启动。同时,重点讨论了Ribbon作为客户端负载均衡器的各种策略,如轮询、最小并发等,并通过示例展示了如何在Spring Boot应用中自定义负载均衡策略。此外,还演示了如何利用RestTemplate进行服务调用。
摘要由CSDN通过智能技术生成

ribbon 客户端负载均衡
在这里插入图片描述

负载均衡种类

RoundRobinRule(); //轮询
BestAvailableRule();//最小并发
AvailabilityFilteringRule();//过滤
WeightedResponseTimeRule();//响应时间
RetryRule();//轮询重试
ZoneAvoidanceRule();//性能可用性

eureka服务端

application.yml配置文件

server:
  port: 8761

eureka:
  instance:
    hostname: localhost # 主机名
  client:
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信
    register-with-eureka: false # 是否将自己的路径 注册到eureka上。eureka server 不需要的,eureka provider client 需要
    fetch-registry: false # 是否需要从eureka中抓取路径。eureka server 不需要的,eureka consumer client 需要
  server:
    enable-self-preservation: false # 关闭自我保护机制
    eviction-interval-timer-in-ms: 3000 # 检查服务的时间间隔

启动类

@SpringBootApplication
// 启用EurekaServer
@EnableEurekaServer
public class EurekaApp {

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

    }
}

服务提供者

配置文件1

server:
  port: 8003

eureka:
  instance:
    hostname: localhost # 主机名
    prefer-ip-address: true # 将当前实例的ip注册到eureka server 中。默认是false 注册主机名
    ip-address: 127.0.0.1 # 设置当前实例的ip
    instance-id: ${eureka.instance.ip-address}:${spring.application.name}:${server.port} # 设置web控制台显示的 实例id
    lease-renewal-interval-in-seconds: 3 # 每隔3 秒发一次心跳包
    lease-expiration-duration-in-seconds: 9 # 如果9秒没有发心跳包,服务器呀,你把我干掉吧~
  client:
    service-url:
      #defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信
      defaultZone: http://localhost:8761/eureka
spring:
  application:
    name: eureka-provider # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径

配置文件2

server:
  port: 8004
eureka:
  instance:
    hostname: localhost # 主机名
    prefer-ip-address: true # 将当前实例的ip注册到eureka server 中。默认是false 注册主机名
    ip-address: 127.0.0.1 # 设置当前实例的ip
    instance-id: ${eureka.instance.ip-address}:${spring.application.name}:${server.port} # 设置web控制台显示的 实例id
    lease-renewal-interval-in-seconds: 3 # 每隔3 秒发一次心跳包
    lease-expiration-duration-in-seconds: 9 # 如果9秒没有发心跳包,服务器呀,你把我干掉吧~
  client:
    service-url:
      #defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信
      defaultZone: http://localhost:8761/eureka
spring:
  application:
    name: eureka-provider # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径

启动类

@EnableEurekaClient //该注解 在新版本中可以省略
@SpringBootApplication
public class ProviderApp2 {


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

服务调用者

配置文件

server:
  port: 9000


eureka:
  instance:
    hostname: localhost # 主机名
  client:
    service-url:
      #defaultZone:  http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka  # eureka服务端地址,将来客户端使用该地址和eureka进行通信
      defaultZone: http://localhost:8761/eureka
spring:
  application:
    name: eureka-consumer # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径


# 配置的方式设置Ribbon的负载均衡策略
EUREKA-PROVIDER: # 设置的服务提供方的 应用名称
  ribbon:
    NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 策略类

启动类

@EnableDiscoveryClient // 激活DiscoveryClient
@EnableEurekaClient
@SpringBootApplication
/*
    配置Ribbon的负载均衡策略 name
    * name:设置 服务提供方的 应用名称
    * configuration:设置负载均衡Bean
 */
//@RibbonClient(name="EUREKA-PROVIDER",configuration = MyRule.class)
public class ConsumerApp {


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

MyRule负载均衡注入

@Configuration
public class MyRule {

    public IRule rule(){
        return new RandomRule(); //随机
//        return new RoundRobinRule(); //轮询
//        return new BestAvailableRule();//最小并发
//        return new AvailabilityFilteringRule();//过滤
//        return new WeightedResponseTimeRule();//响应时间
//        return new RetryRule();//轮询重试
//        return new ZoneAvoidanceRule();//性能可用性
    }
}

RestTemplate注入

@Configuration
public class RestTemplateConfig {


    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return  new RestTemplate();
    }
}

调用服务

@RestController
public class consumer {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/test")
    public String test(){

        String url="http://EUREKA-PROVIDER/test";
        String forObject = restTemplate.getForObject(url, String.class);

        return forObject;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值