一 微服务集群
为什么要集群?提高并发量
结构
服务消费者负载均衡调用
1.常见的负载均衡策略 轮休 可用性检查 权重
2.ribbon
3.feign
3.1入门类配置扫描client
3.2 client代码
二 hystrix
1.微服务架构处理服务健壮性的框架
2.解决微服务架构的雪崩线下
3. 隔离&熔断&降级
服务提供者实现 ribbon
导包 @EnableHystrix
feign
1.feign熔断机制是封装hystrix
三 zuul
1.是什么?为外部访问提供统一的入口,并且我们同可以通过过滤完成过渡,并且封装负载均衡ribbon,封装了熔断hystrix
实现
1.基本配置
2.路由配置 不用服务名访问,加上前缀
server:
port: 4399
spring:
application:
name: ZUUL-GATEWAY
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka #集群环境配置需要改一下
instance:
instance-id: gateway-9527.com
prefer-ip-address: false
3.自定义拦截器实现登录
@Component
public class LoginFilter extends ZuulFilter{
@Override
public String filterType() {
// 登录校验,肯定是在前置拦截
return "pre";
}
@Override
public int filterOrder() {
// 顺序设置为1
return 1;
}
@Override
public boolean shouldFilter() {
// 返回true,代表过滤器生效。
return true;
}
@Override
public Object run() throws ZuulException {
// 登录校验逻辑。
// 1)获取Zuul提供的请求上下文对象
RequestContext ctx = RequestContext.getCurrentContext();
// 2) 从上下文中获取request对象
HttpServletRequest req = ctx.getRequest();
// 3) 从请求中获取token
String token = request.getHeader("token");
// 4) 判断
if(token == null || "".equals(token.trim())){
// 没有token,登录校验失败,拦截
ctx.setSendZuulResponse(false);
// 返回401状态码。也可以考虑重定向到登录页。
ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}
// 校验通过,可以考虑把用户信息放入上下文,继续向后执行
return null;
}
}
4.负载均衡和断路器:配置超时时间
zuul:
retryable: true
ribbon:
ConnectTimeout: 250 # 连接超时时间(ms)
ReadTimeout: 2000 # 通信超时时间(ms)
OkToRetryOnAllOperations: true # 是否对所有操作重试
MaxAutoRetriesNextServer: 2 # 同一服务不同实例的重试次数
MaxAutoRetries: 1 # 同一实例的重试次数
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMillisecond: 3000 #
四 config server
1.准备github配置文件
2.configserver:通过它读取配置文件
3.configclient:真正读取配置文件的地方