Spring Cloud全文目录
源码
什么是微服务?有手就行
SpringCloud简介与5大常用组件
一、手把手教你搭建SpringCloud项目(一)搭建Maven父工程,傻瓜式操作
二、手把手教你搭建SpringCloud项目(二)生产者与消费者
三、手把手教你搭建SpringCloud项目(三)集成Eureka服务注册中心
四、手把手教你搭建SpringCloud项目(四)EurekaServer集群版搭建
五、手把手教你搭建SpringCloud项目(五)生产者集群版搭建
六、手把手教你搭建SpringCloud项目(六)actuator微服务信息完善与Eureka自我保护机制
七、手把手教你搭建SpringCloud项目(七)Eureka实现服务发现(Discovery)
八、手把手教你搭建SpringCloud项目(八)集成Consul服务注册中心
九、手把手教你搭建SpringCloud项目(九)集成Ribbon负载均衡器
十、手把手教你搭建SpringCloud项目(十)集成OpenFeign服务接口调用
十一、手把手教你搭建SpringCloud项目(十一)集成Hystrix之服务降级
十二、手把手教你搭建SpringCloud项目(十二)集成Hystrix之服务熔断
十三、手把手教你搭建SpringCloud项目(十三)集成Hystrix之图形化Dashboard实时监控
十四、手把手教你搭建SpringCloud项目(十四)集成Gateway新一代服务网关
十五、手把手教你搭建SpringCloud项目(十五)集成Config分布式配置中心
十六、手把手教你搭建SpringCloud项目(十六)集成Bus消息总线
十七、手把手教你搭建SpringCloud项目(十七)集成Stream消息驱动
十八、手把手教你搭建SpringCloud项目(十八)集成Sleuth分布式链路跟踪
文章持续更新中,欢迎关注!
一、Ribbon简介
分布式系统中,各个微服务会部署多个实例,如何将服务消费者均匀分摊到多个服务提供者实例上,就要使用到负载均衡器
Ribbon 是负载均衡器
,是一个基于HTTP和CP的客户端负载均衡工具
,它提供了很多负载均衡算法,例如轮询、随即等,在配置服务提供者地址后,可以将服务消费者请求均匀的分发
Ribbon的架构图
Ribbon的核心组件IRule
IRule的七大负载算法
IRule接口有7个实现类,每个实现类代表一个负载均衡算法,默认使用轮询
什么是Load Balancer?
Load Balancer将用户访问分配至各个计算资源(例如服务器,数据库等)
Load Balancer为以下方面提供高效服务:
- 防止请求被发送到不正常的服务器
- 防止资源过载(resource overloading)
- 帮助消除单点故障(singlepoint of failure)
前边的文章,我们实现了消费者访问生产者集群轮询赋值均衡,具体的请点击查看。Ribbon就是实现服务端的负载均衡加RestTemplate的调用。是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和Eureka结合只是其中的一个实例。
二、代码实例
1.添加规则类
注意: 官方文档明确给出了警告:
更改负载算法,由我们的默认轮询算法
换为随机算法
,需要自定义一个配置类。注意:这个自定义配置类不能放在 @ComponentScan 所扫描的当前包下以及子包下,否则自定义的配置类就会被所有的 Ribbon 客户端所共享,达不到特殊化定制的目的了。如下图:
新建MySelfRule
配置类,变为随机,如下图:
package com.dyh.myrule;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 自定义负载均衡规则类
*
* @ClassName: MySelfRule
* @author: dyh
* @since: 2021/12/16 20:53
*/
@Configuration
public class MySelfRule {
@Bean
public IRule myRule() {
// 负载均衡规则改为随机
return new RandomRule();
}
}
2.主启动类 OrderMain81 添加 @RibbonClient
在启动该微服务的时候就能去加载我们的自定义 Ribbon 配置类,从而使配置生效
package com.dyh.springcloud;
import com.dyh.myrule.MySelfRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
/**
* @ClassName: OrderMain81
* @author: dyh
* @since: 2021/12/15 13:06
*/
@SpringBootApplication
@EnableEurekaClient
//name为生产者服务的服务名称 configuration为配置类的类名
@RibbonClient(name = "SPRINGCLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)
public class OrderMain81 {
public static void main(String[] args) {
SpringApplication.run(OrderMain81.class, args);
}
}
3.测试
那现在启动7001服务和7002服务,然后启动8001服务与8002服务,再启动81服务,访问路径http://localhost:81/consumer/payment/get/1,由原先的轮询8001服务与8002服务来回切换,变为了8001服务与8002服务随机访问。
简单集成Ribbon的负载算法就就完成啦。so easy!
下一篇文章学习OpenFeign服务接口调用,持续关注、点赞。我们持续更新中。