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:
|
eureka:
|
||||||
client:
|
client:
|
||||||
fetch-registry: false
|
fetch-registry: true
|
||||||
register-with-eureka: false
|
register-with-eureka: true
|
||||||
service-url:
|
service-url:
|
||||||
defaultZone: http://localhost:8761/eureka
|
defaultZone: http://localhost:8761/eureka
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ spring:
|
|||||||
postLogger: true
|
postLogger: true
|
||||||
routes:
|
routes:
|
||||||
- id: first-service
|
- id: first-service
|
||||||
uri: http://localhost:8081/
|
uri: lb://MY-FIRST-SERVICE
|
||||||
predicates:
|
predicates:
|
||||||
- Path=/first-service/**
|
- Path=/first-service/**
|
||||||
filters:
|
filters:
|
||||||
@@ -30,10 +30,15 @@ spring:
|
|||||||
# - AddResponseHeader=first-response, first-response-header2
|
# - AddResponseHeader=first-response, first-response-header2
|
||||||
- CustomFilter
|
- CustomFilter
|
||||||
- id: second-service
|
- id: second-service
|
||||||
uri: http://localhost:8082/
|
uri: lb://MY-SECOND-SERVICE
|
||||||
predicates:
|
predicates:
|
||||||
- Path=/second-service/**
|
- Path=/second-service/**
|
||||||
filters:
|
filters:
|
||||||
# - AddRequestHeader=second-request, second-request-header2
|
# - AddRequestHeader=second-request, second-request-header2
|
||||||
# - AddResponseHeader=second-response, second-response-header2
|
# - AddResponseHeader=second-response, second-response-header2
|
||||||
- CustomFilter
|
- name: CustomFilter
|
||||||
|
- name: LoggingFilter
|
||||||
|
args:
|
||||||
|
baseMessage: Hi, there.
|
||||||
|
preLogger: true
|
||||||
|
postLogger: true
|
||||||
|
|||||||
@@ -1,16 +1,27 @@
|
|||||||
package com.example.firstservice;
|
package com.example.firstservice;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestHeader;
|
import org.springframework.web.bind.annotation.RequestHeader;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/first-service")
|
@RequestMapping("/first-service")
|
||||||
public class FirstServiceController {
|
public class FirstServiceController {
|
||||||
|
|
||||||
|
Environment env;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public FirstServiceController(Environment env) {
|
||||||
|
this.env = env;
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/welcome")
|
@GetMapping("/welcome")
|
||||||
public String welcome() {
|
public String welcome() {
|
||||||
return "Welcome to the First Service.";
|
return "Welcome to the First Service.";
|
||||||
@@ -23,7 +34,9 @@ public class FirstServiceController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/check")
|
@GetMapping("/check")
|
||||||
public String check() {
|
public String check(HttpServletRequest request) {
|
||||||
return "Hi, there. This is a message from first Service.";
|
log.info("Server port={}", request.getServerPort());
|
||||||
|
return String.format("Hi, there. This is a message from first Service on PORT %s",
|
||||||
|
env.getProperty("local.server.port"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
server:
|
server:
|
||||||
port: 8081
|
port: 0
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
name: my-first-service
|
name: my-first-service
|
||||||
|
|
||||||
eureka:
|
eureka:
|
||||||
client:
|
client:
|
||||||
register-with-eureka: false
|
fetch-registry: true
|
||||||
fetch-registry: false
|
register-with-eureka: true
|
||||||
|
service-url:
|
||||||
|
defaultZone: http://localhost:8761/eureka
|
||||||
|
|
||||||
|
instance:
|
||||||
|
instance-id: ${spring.application.name}:${spring.application.instance-id:${random.value}}
|
||||||
@@ -4,7 +4,10 @@ server:
|
|||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
name: my-second-service
|
name: my-second-service
|
||||||
|
|
||||||
eureka:
|
eureka:
|
||||||
client:
|
client:
|
||||||
register-with-eureka: false
|
fetch-registry: true
|
||||||
fetch-registry: false
|
register-with-eureka: true
|
||||||
|
service-url:
|
||||||
|
defaultZone: http://localhost:8761/eureka
|
||||||
|
|||||||
Reference in New Issue
Block a user