SpringCLoud 구축 Zuul 게 이 트 웨 이 클 러 스 터 프로 세 스 분석
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 클 라 이언 트 를 통합 하여 경로 의 부하 균형 을 실현 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.