zuul:
prefix: "/meetingfilm/" ## 统一前缀
routes:
meetingfilm-user:
path: /userapi/**
serviceId: user-service
retryable: true # 是否允许重试 , 饿汉模式
meetingfilm-cinema:
path: /cinemaapi/**
serviceId: cinema-service
retryable: true
meetingfilm-film:
path: /filmapi/**
serviceId: film-service
retryable: true
meetingfilm-hall:
path: /hallapi/**
serviceId: hall-service
retryable: true
- zuul可以通过配置完成请求路由配置
- zuul服务路由默认支持serviceId作为上下文
- ignored-services可以禁用serviceId
请求路由表达式
- ?匹配任意单个字符
- * 配置任意数量的字符
- ** 配置任意数量的字符支持多级目录
zuul核心之filter
RequestContext里面可以获取到request和response。
核心preFilter
Filter名称 Filter作用
serverletDetectionFilter 检测当前请求是否使用zuulServlet来处理运行
FormBodyWrapperFilter 解析表单数据,并对下游请求进行重新编码
DebugFilter 根据配置参数zuul.debug.request和请求中的debug参数来决定是否执行过滤器操作
preDecorationFilter 根据提供的RouteLocator确定在哪里如何路由
zuul与zull2的区别?
zuul使用的是阻塞式线程完成业务调用。zuul2使用的是异步线程调用。
zuul与hystrix的整合?
/**
* @author :
* @program : meetingfilm.apigwzuul
* @description : 业务降级处理
**/
public class MyFallback implements FallbackProvider {
//多那个路由降级
@Override
public String getRoute() {
return "film-service";
}
//降级时的处理方式
@Override
public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
}
@Override
public int getRawStatusCode() throws IOException {
return 200;
}
@Override
public String getStatusText() throws IOException {
return "OK";
}
@Override
public void close() {
}
@Override
public InputStream getBody() throws IOException {
BaseResponseVO responseVO
= BaseResponseVO.serviceException(
new CommonServiceException(404, "请求有问题,请联系管理员"));
String result = JSONObject.toJSONString(responseVO);
return new ByteArrayInputStream(result.getBytes());
}
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return headers;
}
};
}
}
zuul的cookie和头信息处理?
zuul会过滤一些安全的信息,例如cookie, set-cookie, authorization等。可以通过sensitiveHeaders来修改。