기사 디렉토리
0 환경
- 운영 체제 : win10
- 편집 : 아이디어
- springcloud 버전 : H 버전
1 소개
환경을 기본 봄 부팅 및 제공 봄 Webflux 인 Netty를 사용하여, 기존 서블릿 컨테이너와 함께 사용할 수 없습니다 봄 클라우드 게이트웨이는 전쟁 패키지로 포장하지.
- 특징
- 경로 재 작성
- 동적 라우팅
- 제한
- 集成 springcloud DiscoveryClient
- 통합 회로 차단기 hystrix
- 대비
- 게이트웨이 제품군은 스프링 스프링 제품군의 다른 구성 요소와 원활한 통합입니다
- zuul 긴 연결을 지원하지 않습니다 (웹 소켓)
- 게이트웨이의 리소스 집약적 인 자원 업데이트 및 성능 zuul보다 강한 (+ 비동기 비는 차단)
- 제한
이 개념
- 이해 개념
- 루트 ->베이스 부재 (조성 -> ID + URI + + 어서 필터) 게이트웨이 처리기 매핑 주장을 주장하여 행 정합 (맵핑)의 게이트웨이는 게이트웨이의 요청에 해당하는 경우 상기 매칭 도로 (장면 : 듀티 I 오프 나는 특정 방향 주위 현관 문으로 실행에 갔다하지만 온도 총기 위협을 잡고 보안 건물은 약간의 온도가 그것이 다시 건물 잘못하지 않았다 있도록 마스크를 착용해야합니다 보았다 패스 나 (주장) 테스트를 중지 방)
- 술부
- java8 HTTP 함수 (매칭 조건)에 일치 요청
- 필터
- 일부 서비스 처리 요청 전 / 후
3 게이트웨이 기본 사용법
3.1 만들기 springboot 프로젝트 (게이트웨이)
3.2 추가 의존성
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.3 YML 配置
우리는 목적지 주소를 방문 http://httpbin.org
spring:
cloud:
gateway:
routes:
- id: hi
uri: http://httpbin.org
predicates:
- Path=/get
-이 구성이 권장되지 않습니다 특성 (성가신)
3.4 빈 시작 클래스 구성
YML 구성 및 효과) (동일
/* @Bean
RouteLocator routeLocator(RouteLocatorBuilder builder){
// 可以添加多个
return builder.routes()
// 访问网址 http://httpbin.org/get
// 通过网关后访问 http://localhost:8080/get
.route("hi", r -> r.path("/get").uri("http://httpbin.org"))
.build();
}*/
3.5 시작 게이트웨이
서비스 결합 4 마이크로
또는 이전 유레카 서버 및 게이트웨이 공급자를 사용하도록 계속해서
시작 / 재시작을 세 가지 클래스의 시작을 가능하게 나중에 말했다
4.1 YML 配置
spring:
cloud:
gateway:
discovery:
locator:
# 开启自动代理
enabled: true
# 服务id为true --> 这样小写服务就可访问了
#lower-case-service-id: true
application:
name: gateway
eureka:
client:
service-url:
# defaultZone: http://localhost:1234/eureka
defaultZone: http://localhost:8761/eureka
#日志
logging:
level:
org.springframework.cloud.gateway:
debug
4.2 사용
- 访问 통해 http : // localhost : 8080 / 제공 / 안녕하세요
- 소문자 서비스
#启用它设为true即可 lower-case-service-id: true
spring: cloud: gateway: discovery: locator: # 开启自动代理 enabled: true # 服务id为true --> 这样小写服务就可访问了 lower-case-service-id: true application: name: gateway eureka: client: service-url: # defaultZone: http://localhost:1234/eureka defaultZone: http://localhost:8761/eureka #日志 logging: level: org.springframework.cloud.gateway: debug
- 다시 시작 유레카 서버 및 게이트웨이 및 소비자
- 이번 방문에서 자본 서비스를 불평 할 것이다
4 단언
4.1 시간의 주장
- 전에 -> 요청 시간이 특정 시점 이전에 연결됩니다
- 후 -> 요청 시간이 특정 시점 이후에 연결됩니다
- 사이 - 두 시점 사이> 요청 시간 (시간 내에 두 지점 구분)
spring:
cloud:
gateway:
routes:
- id: before_route
uri: http://www.baidu.com
# 时间断言
predicates:
- Before=2020-03-31T08:38:47+08:00
若是改为Before=2020-03-24T08:38:47+08:00
4.2 경로를 주장
경로 = GET의 시작은 추가 반복하지 않는다
spring:
cloud:
gateway:
routes:
# 路径断言 访问指定地址http://www.w3school.com.cn/tcpip/*
# 也就是localhost:8080/tcpip/*
- id: w3c_route
uri: http://www.w3school.com.cn
predicates:
- Path=/tcpip/{segment}
- 성공적인 방문
- 비 액세스 실패의 경로
4.3 쿼리 주장
spring:
cloud:
gateway:
routes:
# 默认参数
- id: query_route
uri: http://httpbin.org
predicates:
# 可以指定参数和值 ?name=1开头的值 才允许访问
- Query=name,1.*
- 추가 매개 변수가 없습니다
- 성공의 시작에서 플러스 1 개 매개 변수
- 실패의 시작에서 플러스 2 개 매개 변수
4.4 방법 주장
- YML 配置
spring:
cloud:
gateway:
routes:
- id: method_route
uri: http://httpbin.org
# 该网站post请求405 --> 没有post 只能用get测试 用post测试get请求404就对了
predicates:
- Method=GET
- POST 요청 (404) (포스트 방법 (405)이 사이트가 요청을 게시하지 않음을 나타냅니다 경우) 성공은 스크린 샷 간다 페이스트 시작하지 않은 경우
4.5 주장 병용
spring:
cloud:
gateway:
routes:
# 组合使用
- id: many_route
uri: http://httpbin.org
predicates:
# 可以指定参数和值 ?name=1开头的值
- Query=name,1.*
- Method=GET
- After=2020-03-01T08:38:47+08:00
4.6 사용자 정의 라우팅 주장
- 구성 사용자 정의 주장 공장
// 自定义路由断言工厂
// 命名需要以RoutePredicateFactory结尾 比aRoutePredicateFactory 那么yml在使用时a就是断言工厂的名字
@Component
public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.User> {
public CheckAuthRoutePredicateFactory() {
super(User.class);
}
// 自定义配置类
@Override
public Predicate<ServerWebExchange> apply(User config) {
return exchange -> {
System.out.println("进入apply:" + config.getName());
if (config.getName().equals("kitty")){
return true;
}
return false;
};
}
public static class User{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
- YML 配置
spring:
cloud:
gateway:
routes:
# 自定义断言工厂 -name就是之前以xxxRoutePredicateFactory的xxxx为断言工厂名
- id: customer_route
uri: http://httpbin.org
predicates:
- name: CheckAuth
args:
name: kitty
- 때 매개 변수 이름 = 사용자 정의 공장 getName 일관된 주장과 키티
- 매개 변수는 사용자 정의 이름 = 키티 주장 공장 getName과 일치하지 않는 경우
필터 (5)
게이트웨이는 카테고리 필터
- GlobalFilter을
- GatewayFilter을
5.1 AddRequestParameter 필터
요청을 추가 할 때 자동으로 추가 매개 변수를 추가
6 요약
- 기본 구성 콩 또는 시작 클래스 YML는 경로의 XXX 배열
- 자동 프록시 설정을 가능하게 유레카 서버의 통합 및 게이트웨이 구성 따라 추가 YML 연결 서비스뿐만 아니라 서비스 제공을 학습하고 민감한 서비스에 액세스 할 때 로그를 설정
- 학습의 어설
- 경로 주장 -> URL을 일치
- 쿼리 주장 -> 매개 변수 매칭 (사용자 정의 매개 변수 필터링 규칙)과 유사한 이름 = xxx는?
- 방법 주장 - 매칭> HTTP 방법
- 시간의 주장 -> 후 / / 사이 전
- 어설 조성물 -> 이러한 주장의 유기적 결합 전
- 사용자 정의 주장 -> 상속 할 필요는 YML와 일치하도록 구성 AbstractRoutePredicateFactory 사용자 정의 공장을 확장
- 필터 학습 AddRequestParameter 추가 매개 변수를 추가