spring cloud : spring cloud gateway - logging filter, load balancer
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package com.example.apigatewayservice.filter;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||
import org.springframework.cloud.gateway.filter.OrderedGatewayFilter;
|
||||
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||
import org.springframework.stereotype.Component;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class LoggingFilter extends AbstractGatewayFilterFactory<LoggingFilter.Config> {
|
||||
|
||||
public LoggingFilter() {
|
||||
super(Config.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GatewayFilter apply(Config config) {
|
||||
|
||||
GatewayFilter filter = new OrderedGatewayFilter((exchange, chain) -> {
|
||||
ServerHttpRequest request = exchange.getRequest();
|
||||
ServerHttpResponse response = exchange.getResponse();
|
||||
|
||||
log.info("Logging filter baseMessage : {}", config.getBaseMessage());
|
||||
|
||||
if (config.isPreLogger()) {
|
||||
log.info("Logging PRE filter: request id -> {}", request.getId());
|
||||
}
|
||||
|
||||
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
|
||||
if (config.isPostLogger()) {
|
||||
log.info("Logging POST filter: response code -> {}", response.getStatusCode());
|
||||
}
|
||||
}));
|
||||
}, Ordered.HIGHEST_PRECEDENCE);
|
||||
|
||||
return filter;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Config {
|
||||
private String baseMessage;
|
||||
private boolean preLogger;
|
||||
private boolean postLogger;
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,8 @@ server:
|
||||
|
||||
eureka:
|
||||
client:
|
||||
fetch-registry: false
|
||||
register-with-eureka: false
|
||||
fetch-registry: true
|
||||
register-with-eureka: true
|
||||
service-url:
|
||||
defaultZone: http://localhost:8761/eureka
|
||||
|
||||
@@ -22,7 +22,7 @@ spring:
|
||||
postLogger: true
|
||||
routes:
|
||||
- id: first-service
|
||||
uri: http://localhost:8081/
|
||||
uri: lb://MY-FIRST-SERVICE
|
||||
predicates:
|
||||
- Path=/first-service/**
|
||||
filters:
|
||||
@@ -30,10 +30,15 @@ spring:
|
||||
# - AddResponseHeader=first-response, first-response-header2
|
||||
- CustomFilter
|
||||
- id: second-service
|
||||
uri: http://localhost:8082/
|
||||
uri: lb://MY-SECOND-SERVICE
|
||||
predicates:
|
||||
- Path=/second-service/**
|
||||
filters:
|
||||
# - AddRequestHeader=second-request, second-request-header2
|
||||
# - AddResponseHeader=second-response, second-response-header2
|
||||
- CustomFilter
|
||||
- name: CustomFilter
|
||||
- name: LoggingFilter
|
||||
args:
|
||||
baseMessage: Hi, there.
|
||||
preLogger: true
|
||||
postLogger: true
|
||||
|
||||
Reference in New Issue
Block a user