【SpringCloud】负载均衡Rebbon 熔断Hystrix(防止雪崩问题) Feign(根据参数拼接http请求) Gateway(拦截器/路由) 配置中心(变化比较频繁的加入git)

本文详细介绍了SpringCloud的相关技术,包括负载均衡Ribbon的轮询和随机算法,如何处理雪崩问题的熔断器Hystrix,Feign的参数拼接http请求,以及Gateway的拦截器、路由配置和动态路由。同时,还讲解了配置中心Config Server如何从Git获取和管理配置信息。
摘要由CSDN通过智能技术生成

1.负载均衡

1.介绍

负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行
本质:负载均衡是一个算法,可以通过该算法实现从地址列表中获取一个地址进行服务调用。
Ribbon提供了**轮询、随机两种负载均衡算法(默认是轮询)**可以实现从地址列表中使用负载均衡算法获取地址进行服务调用。
在这里插入图片描述

2.步骤

像双十一的时候,订单秒杀,一个服务的访问量会特别大,所以就需要多个来执行同一个功能,形成集群

1.产生多个provider实例
2.在consumer中设置当前方法的返回对象,使用负载均衡算法
3.consumer使用provider的集群的名称(不能有_下划线),找到集群,然后在由拦截器来根据算法分配
但是怎么去Eureka获取provider的集群的名称呢?

1.provider的集群名不能有下划线_
在这里插入图片描述

用虚拟机来获取端口号 ${}

# service name
spring.application.name=demo01-provider-user
# service port
server.port=${port:8081}

2.consumer的启动类要添加负载均衡
@LoadBalanced //在consumer中设置当前方法的返回对象,使用负载均衡算法



@SpringBootApplication
@EnableEurekaClient
public class Demo02ConsumerUser8082Application {
   

    public static void main(String[] args) {
   
        SpringApplication.run(Demo02ConsumerUser8082Application.class, args);
    }
             //把RestTemplate放进IOC容器
                @Bean
                @LoadBalanced  //在consumer中设置当前方法的返回对象,使用负载均衡算法
            public RestTemplate getRt(){
   
             RestTemplate rt=new RestTemplate();
             return rt;
                }

}

3.consumer的Controller类
此处不能写死 provider的 ip,port ,只能写服务名。不能使用_,替换成-

 @RequestMapping(path = "/{id}",method = {
   RequestMethod.GET})
   public Object get02(@PathVariable long id){
   

       //3:此处不能写死 provider的 ip,port ,只能写服务名。不能使用_,替换成-
       String url = "http://demo01-provider-user/users/11";//参1 地址
       String json = rt.getForObject(url, String.class);//参2:数据要转换成什么类型
       return  json;
   }

2.熔断Hystrix

1.介绍

Hystrix是一个延迟和容错库
使用服务降级,线程隔离解决雪崩问题

2.雪崩问题

微服务I 发生异常,请求阻塞,用户请求就不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,形成雪崩效应。
在这里插入图片描述

3.线程隔离

Hystrix为每个依赖服务调用分配一个小的线程池
如果线程池已满调用将被立即拒绝,默认不采用排队,加速失败判定时间
如果线程全部用完了就会进行服务降级
在这里插入图片描述

4.服务降级

及时的告诉你,某个服务访问失败,返回一个失败的结果,不会一直等待下去

优先保证核心服务,而非核心服务不可用或弱可用。用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息)
。 服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响这个依赖服务对应的线程池中的资源,对其它服务没有响应。
\

步骤

1.添加依赖
先在父工程的pom.xml中添加版本控制

<dependencyManagement>
        <dependencies>
       
           <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
                <version>2.2.6.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

然后在再consumer的pom.xml中添加

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

2.在consumer的启动类上添加注解
@EnableCircuitBreaker //开启熔断
或者添加 @SpringCloudApplication注解则之前的三个注解都不要添加,因为该注解包含了
在这里插入图片描述

/*@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker   //开启熔断*/
@SpringCloudApplication
public class Demo02ConsumerUser8082Application {
   

    public static void main(String[] args) {
   
        SpringApplication.run(Demo02ConsumerUser8082Application.class, args);
    }
             //把RestTemplate放进IOC容器
                @Bean
                @LoadBalanced  //在consumer中设置当前方法的返回对象,使用负载均衡算法
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值