Я пытаюсь настроить простой пример Spring Cloud Gateway.
У меня есть 2 docker контейнера, запущенных локально, которые будут отвечать AAA
и ZZZ
при достижении следующей конечной точки
http://localhost:2000/restmessage
http://localhost:2001/restmessage
Я пытаюсь создать простой шлюз, который будет маршрутизировать к одной из этих служб. В конце концов, будет фактический лог c, чтобы принять это решение, но пока я просто хочу увидеть, что что-то работает и жестко запрограммировано на первый экземпляр.
Вот мой GlobalFilter
@Component
public class MacFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerWebExchange modifiedExchange = exchange.mutate()
.request(rq -> rq.uri(
UriComponentsBuilder.fromUri(exchange.getRequest().getURI())
.host("localhost")
.port(2000)
.build()
.toUri()
))
.build();
// ServerWebExchangeUtils.setAlreadyRouted(modifiedExchange);
return chain.filter(modifiedExchange);
}
}
И свойства
spring.cloud.gateway.routes[0].id=routezero
spring.cloud.gateway.routes[0].uri=http://localhost:8081
spring.cloud.gateway.routes[0].predicates[0]=Path=/restmessage
Этот фильтр запускается каждый раз, когда я попадаю на шлюз с сообщением restmessage (http://localhost:8080/restmessage
). Но если закомментированный метод setAlreadyRouted
закомментирован, он попадет в него сотни раз. В конце концов команда curl не работает с 413 REQUEST ENTITY TOO LARGE
. Просматривая журналы служб docker, я могу сказать, что они никогда не выполняются.
$ curl localhost:8080/restmessage -i
HTTP/1.1 413 Request Entity Too Large
content-length: 0
Если я раскомментирую метод setAlreadyRouted
, он больше не будет вызывать сотни раз, и запрос немедленно возвращается , но ответ пуст, и контейнеры docker снова никогда не вызываются.
$ curl localhost:8081/restmessage -i
HTTP/1.1 200 OK
content-length: 0
Я также пробовал это с компонентами FilterFactory
и RouteLocator
, но все они демонстрируют одинаковое поведение .
Я просмотрел всю документацию, но все, что я смог найти, похоже, указывает на то, что это должно работать. Кто-нибудь может мне помочь?