Spring Cloud Zuul 경로 게 이 트 웨 이 및 서비스 필터
6809 단어 java-ee
Zuul
의 주요 기능 은 경로 전송 과 필터 이다.경로 기능 은 마이크로 서비스의 일부분 이다. 예 를 들 어 /api/admin
Admin 서비스 로 전송 하고 /api/member
Member 서비스 로 전송 한다.Zuul
기본 값 과 Ribbon
를 결합 하여 부하 균형 기능 을 실현 했다.도입 의존
pom.xml
에 의존 spring-cloud-starter-netflix-eureka-server
과 spring-cloud-starter-netflix-zuul
을 주로 첨가 합 니 다.
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.cloud
spring-cloud-starter-netflix-zuul
관련 설정
application.yml
에 경로 설정 을 주로 추가 합 니 다.zuul:
routes:
api-a:
path: /api/ribbon/**
serviceId: hello-spring-cloud-web-admin-ribbon
api-b:
path: /api/feign/**
serviceId: hello-spring-cloud-web-admin-feign
경로 설명:
Zuul
입구 류 에 Application
주해 오픈 @EnableZuulProxy
기능 추가@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
게 이 트 웨 이 경로 설정 실패 시 반전
리 셋 클래스 만 들 기
zuul
/**
* hello-spring-cloud-web-admin-feign
*/
@Component
public class WebAdminFeignFallbackProvider implements FallbackProvider {
@Override
public String getRoute() {
// ServiceId, , return "*" return null
return "hello-spring-cloud-web-admin-feign";
}
/**
* ,
* @param route
* @param cause
* @return
*/
@Override
public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
return new ClientHttpResponse() {
/**
* api , ,
* api 404,500
* api
* @return
* @throws IOException
*/
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
}
@Override
public int getRawStatusCode() throws IOException {
return HttpStatus.OK.value();
}
@Override
public String getStatusText() throws IOException {
return HttpStatus.OK.getReasonPhrase();
}
@Override
public void close() {
}
@Override
public InputStream getBody() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
Map map = new HashMap<>();
map.put("status", 200);
map.put("message", " ");
return new ByteArrayInputStream(objectMapper.writeValueAsString(map).getBytes("UTF-8"));
}
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
// getBody
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
return headers;
}
};
}
}
테스트 경로 접근
순차 실행
WebAdminFeignFallbackProvider
> EurekaApplication
> ServiceAdminApplication
> WebAdminRibbonApplication
> WebAdminFeignApplication
서비스 별ZuulApplication
port : 8763,message : zuul
는 Zuul 의 경로 기능 설정 이 성공 적 이라는 것 을 설명 합 니 다.Zuul 의 서비스 필터 기능 사용 하기
port : 8763,message : zuul
경로 뿐만 아니 라 강력 한 기능 도 많다.예 를 들 어 안전 검증 에 사용 된다.서비스 필터 만 들 기
/**
* Zuul
*/
@Component
public class LoginFilter extends ZuulFilter {
private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class);
/**
* ,
* 1. pre:
* 2. routing:
* 3. post:
* 4. error:
* @return
*/
@Override
public String filterType() {
return "pre";
}
/**
*
* @return
*/
@Override
public int filterOrder() {
return 0;
}
/**
* :true/ ,false/
* @return
*/
@Override
public boolean shouldFilter() {
return true;
}
/**
*
* @return
* @throws ZuulException
*/
@Override
public Object run() throws ZuulException {
RequestContext context = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
String token = request.getParameter("token");
if (token == null) {
logger.warn("Token is empty");
context.setSendZuulResponse(false);
context.setResponseStatusCode(401);
try {
context.getResponse().getWriter().write("Token is empty");
} catch (IOException e) {
}
} else {
logger.info("OK");
}
return null;
}
}
테스트 필터
Zuul
Token is empty