Spring - Cloud - 제5 장 - 루트 스위치 (zuul)

6208 단어 SpringCloud
전재 출처 표시: http://blog.csdn.net/forezp/article/details/69939114  본문 은 방지 붕 의 블 로그 에서 나 온 것 이다.
마이크로 서비스 구조 에서 몇 가지 기본 적 인 서비스 관리 구성 요소 가 필요 하 다. 이 는 서비스 등록 과 발견, 서비스 소비, 부하 균형, 차단기, 스마트 경로, 배치 관리 등 을 포함한다. 이 몇 가지 기초 구성 요소 가 서로 협력 하여 간단 한 마이크로 서비스 시스템 을 공동으로 구성 했다.다음 그림 과 같은 간단 한 마이크로 서비스 시스템
 주의: A 서비스 와 B 서 비 스 는 서로 호출 할 수 있 습 니 다. 그림 을 그 릴 때 잊 어 버 렸 습 니 다.또한 서비스 설정 도 서비스 등록 센터 에 등록 되 어 있 습 니 다.
Spring Cloud 마이크로 서비스 시스템 에서 흔히 볼 수 있 는 부하 균형 방식 은 클 라 이언 트 의 요청 이 먼저 부하 균형 (zuul, Ngnix) 을 거 쳐 서비스 게 이 트 웨 이 (zuul 군집) 에 도착 한 다음 에 구체 적 인 서버 에 도착 하 는 것 이다.서 비 스 는 사용 가능 한 서비스 등록 센터 클 러 스 터 에 통일 적 으로 등록 되 어 있 으 며, 서비스의 모든 프로필 은 설정 서비스 관리 (다음 글 설명) 에 의 해 설정 되 어 있 으 며, 서 비 스 를 설정 하 는 프로필 은 git 창고 에 두 어 개발 자 들 이 수시로 설정 을 바 꿀 수 있 도록 합 니 다.
1. Zuul 안내
Zuul 의 주요 기능 은 퍼 가기 와 필터 입 니 다.경로 기능 은 마이크로 서비스의 일부분 입 니 다. 예 를 들 어/api/user 는 user 서비스 로 전송 하고/api/shop 은 shop 서비스 로 전송 합 니 다.zuul 은 기본적으로 Ribbon 과 결합 하여 부하 균형 기능 을 실현 했다.
zuul 은 다음 과 같은 기능 이 있 습 니 다.
  • Authentication
  • Insights
  • Stress Testing
  • Canary Testing
  • Dynamic Routing
  • Service Migration
  • Load Shedding
  • Security
  • Static Response handling
  • Active/Active traffic management

  • 준비 작업
    지난 절의 공 사 를 계속 사용 하 다.기 존 프로젝트 에 새 프로젝트 를 만 듭 니 다.
    3. 서비스 - zuul 프로젝트 만 들 기
    pom. xml 파일 은 다음 과 같 습 니 다.
    
    
        4.0.0
    
        com.forezp
        service-zuul
        0.0.1-SNAPSHOT
        jar
    
        service-zuul
        Demo project for Spring Boot
    
        
            com.forezp
            sc-f-chapter5
            0.0.1-SNAPSHOT
        
    
        
            
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-client
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.cloud
                spring-cloud-starter-netflix-zuul
            
        
    
    
    

     
    입구 application 클래스 에 주석 @ EnableZuulProxy 를 추가 하여 zuul 기능 을 엽 니 다.
    @SpringBootApplication
    @EnableZuulProxy
    @EnableEurekaClient
    @EnableDiscoveryClient
    public class ServiceZuulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run( ServiceZuulApplication.class, args );
        }
    }
    
    

    프로필 application. yml 에 다음 설정 코드 를 추가 합 니 다.
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
    server:
      port: 8769
    spring:
      application:
        name: service-zuul
    zuul:
      routes:
        api-a:
          path: /api-a/**
          serviceId: service-ribbon
        api-b:
          path: /api-b/**
          serviceId: service-feign
    

    우선 서비스 등록 센터 의 주 소 를 지정 합 니 다.http://localhost:8761/eureka/서비스의 포트 는 8769 이 고 서비스 이름 은 서비스 - zuul 입 니 다./api - a/로 시작 하 는 요청 은 모두 service - ribbon 서비스 에 전달 합 니 다./api - b/로 시작 하 는 요청 은 모두 service - fegn 서비스 에 전달 합 니 다.
    이 다섯 개의 공 사 를 순서대로 운행 하 다.브 라 우 저 접근 열기:http://localhost:8769/api-a/hi?name=forezp ;브 라 우 저 디 스 플레이:
    hi forezp,i am from port:8762
    브 라 우 저 접근 열기:http://localhost:8769/api-b/hi?name=forezp ;브 라 우 저 디 스 플레이:
    hi forezp,i am from port:8762
    이것 은 zuul 이 경로 의 역할 을 했다 는 것 을 설명 한다.
    서비스 필터
    zuul 은 경로 뿐만 아니 라 여과 도 할 수 있 고 안전 검증 도 할 수 있 습 니 다.계속 개조 공사;
    @Component
    public class MyFilter extends ZuulFilter {
    
        private static Logger log = LoggerFactory.getLogger(MyFilter.class);
        @Override
        public String filterType() {
            return "pre";
        }
    
        @Override
        public int filterOrder() {
            return 0;
        }
    
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        @Override
        public Object run() {
            RequestContext ctx = RequestContext.getCurrentContext();
            HttpServletRequest request = ctx.getRequest();
            log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));
            Object accessToken = request.getParameter("token");
            if(accessToken == null) {
                log.warn("token is empty");
                ctx.setSendZuulResponse(false);
                ctx.setResponseStatusCode(401);
                try {
                    ctx.getResponse().getWriter().write("token is empty");
                }catch (Exception e){}
    
                return null;
            }
            log.info("ok");
            return null;
        }
    }

     
  • filter Type: 필터 의 종 류 를 나타 내 는 문자열 을 되 돌려 줍 니 다. zuul 에서 네 가지 서로 다른 생명주기 의 필터 종 류 를 정 의 했 습 니 다. 구체 적 으로 다음 과 같 습 니 다. 
  • pre: 경로 이전
  • routing: 경로 의 경우
  • post: 경로 다음
  • error: 오류 호출 보 내기
  • filter Order: 여과 순서
  • shouldFilter: 여 기 는 논리 적 으로 판단 할 수 있 습 니 다. 여과 할 지 여 부 는 본문 true, 영원히 여과 할 수 있 습 니 다.
  • run: 필터 의 구체 적 인 논리.sql, nosql 을 포함 하여 이 요청 에 접근 할 수 있 는 권한 이 있 는 지 없 는 지 판단 할 수 있 습 니 다.


  • 이 때 접근:http://localhost:8769/api-a/hi?name=forezp ;웹 페이지 표시:
    token is empty
    방문 하 다. http://localhost:8769/api-a/hi?name=forezp&token=22 ;  웹 페이지 표시:
    hi forezp,i am from port:8762
    본문 원본 다운로드: https://github.com/forezp/SpringCloudLearning/tree/master/sc-f-chapter5
    5. 참고 자료:
    http://blog.csdn.net/forezp/article/details/69939114
    http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html
    저작권 성명: 본 고 는 블 로 거들 의 오리지널 글 입 니 다. 전 재 를 환영 합 니 다. 전 재 는 작가, 원문 하이퍼링크, 블 로 거들 주 소 를 밝 혀 주 십시오.http://blog.csdn.net/forezp. https://blog.csdn.net/forezp/article/details/81041012

    좋은 웹페이지 즐겨찾기