SpringCLoud 구축 Zuul 게 이 트 웨 이 클 러 스 터 프로 세 스 분석

1.기술 사용
  Springboot,SpringCloud,Zuul,Nignx
2.목적
Zuul 을 사용 하여 마이크로 서비스 가 사용 가능 한 게 이 트 웨 이 를 구축 합 니 다.
3.프로젝트 생 성
3.1 등록 센터 만 들 기(약)
3.2 hello-service 를 만 드 는 서비스 프로젝트
3.3 springcloud-zuul-ha 게 이 트 웨 이 서비스 만 들 기
3.3.1 프로젝트 생 성(약)
3.3.2 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>qinfeng.zheng</groupId>
  <artifactId>springcloud-zuul-ha</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>springcloud-zuul-ha</name>
  <description>Demo project for Spring Boot</description>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-zuul</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>

  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <!--Dalston.RC1      zuul     -->
        <version>Brixton.SR7</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>
3.3.3 application.yml

###      
eureka:
 client:
  serviceUrl:
   defaultZone: http://localhost:8763/eureka/
###api     
server:
 port: 82
###    
spring:
 application:
  name: service-zuul

zuul:
 routes:
 ###        
  api-a:
   path: /api-hello/**  #       api-hello,     hello-service  
   ###     zuul      ribbon             
   serviceId: hello-service
3.3.4 필 터 를 정의 합 니 다.
  qinfeng.zheng.filter.AccessFilter

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
*     : 16:07 2018/7/16
*     :
*     : ZhengQf
*    : 0.0.1
*     :      Zuul Filter,            
*
*  : zuul    : 1.    
* 2.  
*/
@Component
public class AccessFilter extends ZuulFilter {

  @Value("${server.port}")
  private String serverPort;

/**
*       ,                   ,
* pre:               ,       
* routing :          ,      ,                 .
* post :  routing   error        ..  post                   
* error :           
*/
  @Override
  public String filterType() {

    return "pre"; //
  }

/**
*        .
*            ,          
*          
*/
  @Override
  public int filterOrder() {
    return 0;
  }

/**
*          ,    true,         
*          
* @return
*/
  @Override
  public boolean shouldFilter() {
    return true;
  }

/**
*        
* @return
*/
  @Override
  public Object run() {

 

  // 1.     
  RequestContext currentContext = RequestContext.getCurrentContext();
  // 2.   Request
  HttpServletRequest request = currentContext.getRequest();
  // 3.  token            
  String token = request.getParameter("token");
  request.setAttribute("serverPort", serverPort);
  if (StringUtils.isEmpty(token)) {
    //       ...          ,            
    currentContext.setSendZuulResponse(false);
    currentContext.setResponseBody("token is null");
    currentContext.setResponseStatusCode(401);
    return null;
    //         
  }
  //             ...
  System.out.println("       :" + serverPort);
  return null;
  }

}
3.3.5 시동 클래스

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class SpringcloudZuulHaApplication {

  public static void main(String[] args) {
    SpringApplication.run(SpringcloudZuulHaApplication.class, args);
  }
}
3.3.6 게 이 트 웨 이 프로젝트 시작
server.port 를 사용 하여 두 개의 게 이 트 웨 이 항목 을 모 의 합 니 다.포트 번 호 는 각각 81,82---->게 이 트 웨 이 높이 를 테스트 할 수 있 습 니 다.
server.port 를 사용 하여 두 개의 hello-service 프로젝트 를 모 의 합 니 다.포트 번 호 는 각각 8080,8081->zuul 의 경로 테스트 시 자동 부하 균형 입 니 다.
등록 센터 를 보면 모두 네 개의 서비스 가 있 습 니 다.

3.4 nginx 부하 균형 설정 후 cmd,start nginx.exe nginx 서비스 시작

   upstream backServer{
    server 127.0.0.1:81;
    server 127.0.0.1:82;
  }
  
  server {
    listen    80;
    server_name qinfeng.zheng.com;

    location / {
      ###               
      proxy_pass http://backServer/;
      index index.html index.htm;
    }
  }
3.5 로 컬 host 파일 에 qinfeng.zheng.com 도 메 인 이름 설정
4.테스트
첫 번 째 요청:http://qinfeng.zheng.com/api-hello/hello/index?token=123
  

두 번 째 요청:http://qinfeng.zheng.com/api-hello/hello/index?token=123


5.총화
1.Nignx 부하 균형 과 역방향 대리 기술 을 사용 하면 게 이 트 웨 이 를 높 게 사용 할 수 있 습 니 다.
2.zuul 게 이 트 웨 이 는 자동 으로 ribbon 클 라 이언 트 를 통합 하여 경로 의 부하 균형 을 실현 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기