SpringCloud-服务消费者(订单服务Feign方式)

1、引用依赖

      
        org.springframework.boot
        spring-boot-starter-parent
        2.1.3.RELEASE
        
    

    
        UTF-8
        UTF-8
        1.8
        Finchley.SR1
    

    
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
       
            org.springframework.cloud
            spring-cloud-starter-openfeign
       

        
        
            com.google.guava
            guava
            16.0.1
        

    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            

        

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            

        

    

    

2、接口类

package com.sirius.order.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.sirius.order.fegin.member.MemberApiFegin;

@RestController
public class OrderApiController {

    @Autowired
    private MemberApiFegin memberApiFegin;
    
    @RequestMapping("/getOrder")
    public String getOrder(){
        return memberApiFegin.getMember();
    }
}


会员接口调用类:

package com.sirius.order.fegin.member;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient("sirius-member")
public interface MemberApiFegin {

    @RequestMapping("/getMember")
    public String getMember();
}

-- 会员接口Feign调用类改造采用继承会员服务定义的接口,就不用拷贝

 @RequestMapping("/getMember")
    public String getMember();

内容


3、配置文件

#端口号
server.port=9004

#设置线程数(默认50)

server.tomcat.max-threads=10
#服务名称
spring.application.name=sirius-order-fegin

#注册中心
eureka.client.serviceUrl.defaultZone=http://admin:[email protected]:9001/eureka/
#表示是否将自己注册到Eureka Server
eureka.client.registerWithEureka = true
#表示是否从Eureka Server获取注册信息
eureka.client.fetchRegistry = true


#日志
#LOG
logging.file = ./logs/log.log

4、启动类

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients //可以开启feign客户端权限
public class OrderApplicationStart {

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

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、Feign客户端超时时间设置(默认是1秒)(springcloud feign默认开启支持ribbon)

      ribbon.ReadTimeout=3000 指建立连接所用的时间,适用于网络状态正常的情况下,两端连接所用的时间。

      ribbon.ConnectTimeout=3000 指的是建立连接后从服务器读取到可用资源所用的时间

      #同一台实例最大重试次数,不包括首次调用
      ribbon.MaxAutoRetries = 1
      #重试负载均衡其他的实例最大重试次数,不包括首次调用
      ribbon.MaxAutoRetriesNextServer = 1
      #是否所有操作都重试
      ribbon.OkToRetryOnAllOperations = false

2、服务雪崩效应产生的原因

      a、解释:默认情况下Tomcat只有一个线程池去处理客户端发送的所有请求,这样的话在高并发情况下,如果客户端所有的请求堆积到同一个服务接口上,就会产生Tomcat的所有线程去处理该服务接口,可能会导致其他服务接口访问。

tomcat最大请求数为20,客户端发送100个请求,会发生80个请求产生延迟等待。

      b、hystrix简单介绍

           1、服务保护框架,在微服务中hystrix能够为我们解决哪些事情?

                     1.1、 断路器、

                    1.2、服务降级、

                     1.3、服务熔断、

                    1.4、服务隔离机制

                    1.5、服务雪崩效应(连环雪崩效应,如果比较严重的话,可能导致整个微服务接口无法访问,所有服务都会瘫痪。)

                     高并发下可能导致其它客户端无法访问......

          2、基于hystrix解决服务雪崩效应的原理:

                    2.1、服务降级

                            在高并发情况下,防止用户一直等待,使用服务降级方式(返回一个友好的提示给客户端,不会去处理请求,调用fallback),目的是为了用户体验。

                           秒杀-----当前请求人数过多,请稍后重试。

                           如果调用接口超时的时候(默认是1秒,浏览器请求订单接口观察是否调用会员服务(会员服务sleep下并观察日志)),如果在一秒中没有及时响应的话,默认情况下业务逻辑还是可以执行的,但是直接执行服务降级方法。

                    2.2、服务隔离

                             线程池(高并发情况下)和信号量隔离。

                             客户端  订单服务(订单信息和订单用户信息)------采用服务隔离机制 线程池隔离:每个服务接口都有自己独立的线程池(线程池1 和 线程池2),每个线程池互不影响,缺点:CPU占用率非常高。不是所有的接口都去采用线程池隔离,核心是关键接口。

                    2.3、服务熔断(保险丝)

                            服务熔断目的是为了保护服务,在高并发下,如果请求达到了一定的极限(可以自己设置阈值),如果流量超出了设置的阈值,自动开启保护服务功能(走降级方法),使用服务降级方式返回一个友好的提示。熔断机制和服务降级一起使用。

 

        


 

你可能感兴趣的:(SpringCloud-服务消费者(订单服务Feign方式))