lilele200706

 

Ribbon的学习思路

Ribbon

它是什么

SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具

它能干什么

它主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。简单的说,就是在配置文件中列出LoadBalancer后面所有的机器,Ribbon会自动的帮组你基于某种规则(如轮询、随机或权重连接等等)去连接这些机器。我们也可以很容易的使用Ribbon来实现自己定义的负载均衡算法。

负载均衡

LB是在微服务或分布式集群中经常使用的一种技术。

简单的说,负载均衡就是将用户的请求平均的分摊到多个相同服务上,从而达到系统的高性能,高可用。

常见的高可用软件有Nginx,Lvs,Apache+Tomcat在文件中配置等等。

Dubbo、SpringCloud均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义。

负载均衡的简单分类:

  1. 集中式LB

    在消费方和服务方之间使用独立的LB设施,如Nginx:反向代理服务器,由设施负责按照某种规则把请求发送给服务方。

  2. 进程式LB

    将负载均衡逻辑集成到消费方,消费方从服务注册中心获取有哪些地址可用,然后从中选取一个合适的服务器。

    Ribbon就属于进程式LB,它只是一个类库,集成于消费方进程,消费方通过它来获取服务方提供的地址。

 

怎么使用它

1.在消费方模块导包

<!--Ribbon-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-ribbon</artifactId>
   <version>1.4.6.RELEASE</version>
</dependency>

2.配置文件

3.开启这个功能,注解

//Ribbon和Eureka整合之后,客户端不需要之间通过服务名调用,不用再关心地址和端口号
//Eureka
@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer_80 {
   public static void main(String[] args){
       SpringApplication.run(DeptConsumer_80.class,args);
  }
}
//Ribbon
@Configuration //springBoot的注解 ,相当于spring中 applicationContext.xml
public class ConfigBean {

   //配置负载均衡实现RestTemplate
   @Bean
   @LoadBalanced //通过Ribbon实现的
   public RestTemplate getRestTemplate(){
       return new RestTemplate();
  }
}
@RestController
public class DeptConsumerController {
   @Autowired
   private RestTemplate restTemplate;//提供多种便捷访问远程http服务的方法,简单的Restful服务模板

   //private static final String REST_URL_PREFIX = "http://localhost:8001";
   //Ribbon,访问服务这里的地址应该是一个变量,通过服务名来访问。
   private static final String REST_URL_PREFIX = "SPRINGCLOUD-PROVIDER-DEPT-8001";
   @RequestMapping("/consumer/dept/get/{id}")
   public Dept get(@PathVariable("id") Long id){
       return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);
  }
   @RequestMapping("/consumer/dept/add")
   public boolean add(Dept dept){
       return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,Boolean.class);
  }
   @RequestMapping("/consumer/dept/list")
   public List<Dept> list(){
       return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
  }
}

4.启动测试

再增加两个服务提供方,可以看到每次从不同的服务提供方获取数据。

  1. 增加两个数据库。

  2. 导包。(与第一服务提供方模块一样)

  3. 添加配置文件。(除了端口,数据库,其他一样)

server:
port: 8001 #修改

#mybatis配置
mybatis:
type-aliases-package: org.lele.springcloud.pojo #别名
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml

#spring配置
spring:
application:
  name: springcloud-provider-dept
datasource:
  type: com.alibaba.druid.pool.DruidDataSource
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8 #需要改
  username: root
  password: 123456

#Eureka 配置,服务注册到哪里
eureka:
client:
  service-url:
    defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: springcloud-provider-dept-8001

#info 配置
info:
app.name: lele-springcloud
company: org.leletest.com

4.包中所有文件。

5.添加启动类,端口需要修改。

6.启动测试

自定义负载均衡算法

posted on 2021-12-04 22:15  lilele200706  阅读(79)  评论(0)    收藏  举报

导航