springcloud Ribbon负载均衡

一、Ribbon负载均衡

Eureka已经集成Ribbon,所以无需引入依赖,要想使用Ribbon,只需在消费者的启动类的RestTemplate Http客户端工具类模板中配置

注解@LoadBalanced //开启负载均衡,浏览器访问消费者的Controller时,通过restTemplate方法访问其他服务类,该方法已经被定义负载均衡默认是轮询。
在这里插入图片描述

3001端口的微服只在一个注册中心注册了,也能同步到各个注册中心的分片中
在这里插入图片描述

二、负载均衡实例

1.Eurek集群

这个是eureka集群,参考上一张节搭建eureka集群,服务提供者服务消费者可以分别注册响应的集群中(注册中心不搭建集群也可以)
在这里插入图片描述

2.服务提供者集群

服务名相同,端口号不同来模拟微服务集群
端口号3001机台的服务:

server:
  port: 3001
spring:
  application:
    name: good-provide
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dev?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456

eureka:
  client:
    service-url:
      defaultZone: http://eureka-server01:2001/eureka/ #注册到eureka集群中的某一个机台中

表现层

@RestController
@RequestMapping("/provide")
public class ProvideRibbonController {
    @Autowired
    private StudentServer studentServer;
    @GetMapping("/find")
    public Student find() {
        return studentServer.findById();
    }


}

端口号3002机台的服务:

server:
  port: 3002
spring:
  application:
    name: good-provide
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dev?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456

eureka:
  client:
    service-url:
      defaultZone: http://eureka-server03:2003/eureka/

表现层:

@RestController
@RequestMapping("/provide")
public class Provide02RibbonController {

    @RequestMapping("/find")
    public Student find() {
        Student student = new Student();
        student.setSex("男");
        student.setScore(88.0);
        student.setName("王阿伯强");
        student.setAge(88);
        student.setSid(88);
        return student;
    }
}

3.服务消费者(配置负载均衡算法的地方)

配置好算法,按照服务名字,去轮询随机等访问服务提供者

server:
  port: 19092
spring:
  application:
    name: user-consumer

eureka:
  client:
    service-url:
      defaultZone: http://eureka-server01:2001/eureka/ #注册到其中一个注册中心去
  instance:
    #指定IP地址
    #ip-address: 127.0.0.1
    #访问服务的时候,推荐使用IP(访问本服务的时候推荐使用此IP,然后在Euraka的状态显示中显示的是Ip地址而不是主机名,消费者获取的时候也是获取ip地址)
    prefer-ip-address: true

启动类注册RestTemplate
RestTemplate的方法根据注册中心的注册表信息,根据@LoadBalanced注解配置的负载均衡算法,调用RestTemplate实例的方法去远程调用微服务

Eureka已经集成Ribbon,所以无需引入依赖,要想使用Ribbon,直接在RestTemplate的配置方法上添加@LoadBalanced注解即可

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableEurekaClient
public class UserConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserConsumerApplication.class, args);
    }
    @Bean
    @LoadBalanced
    public RestTemplate find() {
        return new RestTemplate();
    }

}

表现层:

@RestController
@RequestMapping("/ribbon")
public class RibbonController {
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/find")
    public Student find() {
        //restTemplate 会根据url=http://服务名+/控制器地址(controller)+/方法地址 来获取ip地址和相应的方法
        String url = "http://good-provide" + "/provide/find";
        return restTemplate.getForObject(url, Student.class);

    }

}

请求结果:
第一次:
请求的是3002端口的微服务
在这里插入图片描述
第二次:
请求的是3001端口的微服务
在这里插入图片描述
默认是轮询策略,如果要配置其它策略可以在服务消费者配置文件中配置

server:
  port: 19092
spring:
  application:
    name: user-consumer
# 修改服务地址轮询策略,默认是轮询,配置之后变随机
good-provide: #服务提供者的服务名
  ribbon:
    #轮询
    #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
    #随机算法
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    #重试算法,该算法先按照轮询的策略获取服务,如果获取服务失败则在指定的时间内会进行重试,获取可用的服务
    #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule
    #加权法,会根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越大。刚启动时如果同统计信息不足,则使用轮询的策略,等统计信息足够会切换到自身规则。
    #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

eureka:
  client:
    service-url:
      defaultZone: http://eureka-server01:2001/eureka/
  instance:
    #指定IP地址
    #ip-address: 127.0.0.1
    #访问服务的时候,推荐使用IP(访问本服务的时候推荐使用此IP,然后在Euraka的状态显示中显示的是Ip地址而不是主机名,消费者获取的时候也是获取ip地址)
    prefer-ip-address: true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值