SpringCloud 분산 (4) 분산 게이트웨이 Zuul 사용 상세 정보
zuul은 요청 루트, 로그인 검증 등 기능을 제공하는 API 인터페이스 마이크로서비스다.1. Zuul 서비스 a) 새 Spring 프로젝트를 구축하고 Zuul, Eureka Discovery를 선택합니다.b)****Application은 @EnableZuulProxy를 사용하여 Zuul 기능을 엽니다.c)application.properties에 서버를 추가합니다.port=8888 spring.application.name=apigate eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8080/eureka/
둘째, 프로필에 zuul을 추가하도록 요청합니다.routes.=요청 경로 형식입니다.예를 들면 주울.routes.restservice1=/restservice1/** 사용자가 요청하면http://127.0.0.1:8888/restservice1/person/getById?id=1rest 서비스 1 서비스의person/get By Id에 접근할 때?id=1. 웹 프로젝트에 스프링을 설정하면.application.name=testweb2, 그러면 다음과 같이 zuul을 설정합니다.routes.testweb2=/web/**http://127.0.0.1:8888/web/test/test1테스트 웹 2 프로젝트의/테스트/테스트 1에 접근합니다.
우리는 일반적으로rest 서비스1을 주울의 상류(upstream) 서버라고 부른다.주의: "상위 서버"인터페이스 서비스에 인터럽트를 설정하고 인터럽트 시간이 조금만 길면 zuul 쪽에서 시간 초과 오류를 받을 수 있습니다.이렇게 하면 외부 방문자에게http://127.0.0.1:8888접촉하면 돼, 구체적인 어떤 서비스와 직접 통신할 필요가 없어.사이트 내부는 어떻게 Eureka를 통해 자동 확장을 실현하고 대외적으로는 Zuul을 빌려 전방 서버의 자동 확장을 실현할 수 있습니까?이것은 마이크로서비스 구조가 우악스러운 곳이다.순수한 웹 사이트의 스위치를 zuul로 하는 것을 권장하지 않습니다. zuul은 인터페이스 서비스의 스위치만 합니다.웹 사이트의 스위치는nginx를 사용하는 것을 권장합니다.
3. 요청 필터는 ZuulFilter를 지원하며 요청이 루트되기 전에 권한 검사를 할 수 있습니다.import javax.servlet.http.HttpServletRequest; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException;
public class CheckFilter extends ZuulFilter {
@Override
public Object run() throws ZuulException {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String token = request.getParameter("token");
if(token==null||!token.equals("123"))// token=123
{
System.out.println("token ");
ctx.setSendZuulResponse(false);//
ctx.setResponseStatusCode(401);//
}
return null;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public int filterOrder() {
return 0;
}
@Override
public String filterType() {
return "pre";
}
}
*** Application에 @Bean CheckFilter filter1 () {return new CheckFilter ();}Zuul 서버와'업스트림 서버'는 두 개의 프로세스, 심지어 두 개의 서버에서 실행되기 때문에 Zuul에서 requeset.setAttribute에서 설정한 값은 업스트림 서버에서 찾을 수 없습니다.ZuulFilter에서 업스트림 서버에 메시지 헤더를 전달할 수 있습니다. RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); ctx.addZuulRequestHeader(“X-MyHeader1”, “hello”); 업스트림 서버의 요청 헤더에 X-MyHeader1 값이 표시됩니다.
ZuulFilter 기타 filterType:pre(요청이 라우팅되기 전에 호출됨);routing (루트 요청 시 호출됨);error: 오류가 발생했을 때 호출합니다.post:routing과 error 필터를 호출합니다.
postFilter를 작성하여 상위 서버에 보낸 응답을 하위 요청자에게 보내기 전에 메시지 등 처리를 추가합니다:importcom.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException;
public class PostFilter extends ZuulFilter {
@Override
public Object run() throws ZuulException {
RequestContext ctx = RequestContext.getCurrentContext();
ctx.addZuulResponseHeader("X-Shit", "6666");
return null;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public int filterOrder() {
return 0;
}
@Override
public String filterType() {
return "post";
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SpringCloud 분산 (4) 분산 게이트웨이 Zuul 사용 상세 정보마이크로서비스 체계에서 Eureka Server와 통신하는 마이크로서비스에 대해 서비스 이름을 사용하면 접근할 수 있다.그러나 휴대전화, 웹 사이트 등 외부 방문자들은 여전히 N다중 서버와 상호작용을 해야 하고 그들...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.