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