大家好,我是IT修真院深圳分院第十三期学员,一枚正直纯洁善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务四里面的一个扩展:springboot和redis整合。

1 背景介绍
1.1 Springcloud Ribbon是什么?
Springcloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于NETflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地面向服务的REST模板请求自动转换成客户端负载均衡的服务调用。
1.2 如何做负载均衡?
负载均衡在系统架构中是一个非常重要,在一个分布式系统中是必不可少的。负载均衡的话分为硬件负载均衡和软件负载均衡。硬件负载均衡的话主要通过在服务器节点安装专门用于负载均衡的设备,比如F5等;
而软件负载均衡则是通过在服务器安装一些具有负载均衡功能或模块的软件来完成请求分发工作的。
其中常见的软件负载均衡有二种,一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,如NGINX,另一种是将负载均衡逻辑使用代码形式封装到服务消费者的客户端上,服务消费者客户端维护了一份服务提供者的一份信息表单,有了信息表单,同负载均衡策略将请求分摊给多个服务提供者,从而实现负载均衡。
2 知识剖析
2.1 RestTemplate是什么
1、RestTemplate是Sping Resources中一个访问第三方RESTFUL API接口的网络请求框架。

2、RestTemplate是用来消费REST服务的,所以RestTemplate的主要方法都与REST的HTTP协议的一些方法紧密项链,如POST,GET,PUT,DELETE等

3、RestTemplate的支持XML和json数据格式,默认实现了序列化,可以自动将JSON转换为实体

2.2 Ribbon支持的负载均衡策略
1、BestAvailableRule:选择最小请求数
2、ClientConfigEnabledRoundRobinRule:轮询
3、RandomRule:随机选择一个server。
4、RoundRobinRUle:轮询选择server
5、RetryRule:根据轮询方式重试
6、WeightedResponseTimeRule:根据响应时间去分配一个weight,weight越低,被选中的可能性越低
7、ZoneAvoidanceRule:根据server的zone区域和可用性来轮询选择

3.常见问题

如何配置配置相应的Ribbon负载均衡策略

4 解决方案
在springcloud client的配置文件中添加:

eureka-client:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

5.编码实战

6.扩展思考

7.参考文献
CSDN、百度百科

8 更多讨论
1、ribbon默认使用哪种负载均衡策略
ribbon默认使用的是ZoneAvoidanceRule,这种根据server的Zone区域和可用性轮询的负载均衡策略。

2、ribbon和feign的区别
ribbo知识单独的客户端负载均衡的组件。在ribbon中如果要调用rest接口,就必须借用restTemplate。
feign不仅仅是集成了ribbon,还封装了自己的一个http请求工具,除此之外,feign还封装了hystrix熔断器。

3、ribbon和hystrix熔断器如何结合
添加相应依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

在启动类添加注解:

@EnableDiscoveryClient
@EnableEurekaClient
@SpringBootApplication
@EnableHystrix
public class RibbondemoApplication {

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

在需要熔断的地方添加注解:

    @HystrixCommand(fallbackMethod = "hiError")
    public String hiService(String name){
        return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
    }

    public String hiError(String name){
        return "hi,"+name+",sorry,error!";
    }
}

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

快来与我一起学习吧~ http://www.jnshu.com/login/1/45664133

腾讯视频:https://v.qq.com/x/page/p0774w860qt.html

10-02 16:18