Порядок маршрутов в Spring Cloud Gateway

Мы реализуем маршруты программно, используя реализацию RouteDefinitionLocator. У нас есть две службы, которые должны регистрироваться на одном и том же пути маршрута, причем одна из них используется в качестве запасного варианта, если другая не существует. Предпочтительный маршрут с конкретным путем:

RouteDefinition{id='CompositeDiscoveryClient_ms-1400133464', predicates=[PredicateDefinition{name='Path', args={pattern=/yambas/rest/apps/*/models/ms/**}}], filters=[FilterDefinition{name='RewritePath', args={regexp=/yambas/rest/apps/(?<remaining>.*), replacement=/ms/apps/${remaining}}}], uri=lb://ms, order=0}

И более общий, который должен срабатывать, только если был найден другой маршрут:

RouteDefinition{id='CompositeDiscoveryClient_yambas-1171178634', predicates=[PredicateDefinition{name='Path', args={pattern=/yambas/rest/**}}], filters=[], uri=lb://yambas, order=0}

Таким образом, при вызове /yambas/rest/apps/bla/models/ms следует использовать первый маршрут, а при вызове /yambas/rest/apps/bla/models/otherms/* следует использовать второй (резервный).

Проблема в том, что даже атрибут order на маршруте, похоже, не решает эту проблему; в настоящее время мы не находим возможности установить этот порядок / приоритет маршрутов. Это намерение?


person Andreas    schedule 06.05.2019    source источник
comment
Они оба порядка 0, что означает случайность. Вы установили заказ, но он не отображается? Какую версию ты используешь?   -  person spencergibb    schedule 06.05.2019
comment
Привет, Спенсер, я попытался установить для первого порядка 50, а для второго - 0 - тогда он не находит никакого маршрута для /yambas/rest/apps/bla/models/ms   -  person Andreas    schedule 06.05.2019


Ответы (2)


Кажется, что мы установили неправильный порядок - установка маршрута с более низким приоритетом на порядок 1 и более высокого на 0 заставляет его работать.

@spencergibb, о котором определенно стоит упомянуть в документации.

person Andreas    schedule 07.05.2019

Более конкретные маршруты должны появиться первыми в конфигурации маршрутизации, а общие - в конце.

Например: http: // gateway-url / v1 / accounts / ** всегда соответствует идентификатору маршрута-1, а http: // gateway-url / v1 / ** соответствует идентификатору маршрута-2.

spring:
  cloud:
    gateway:
      routes:
      - id: route-id-1
        uri: http://www.someurl.com
        order: 0
        predicates:
        **- Path=/v1/accounts/****
        filters:
        - RewritePath=/v1/accounts/(?<segment>.*), /$\{segment}
      - id: route-id-2
        uri: http://www.someurl1.com
        order: 1
        predicates:
        **- Path=/v1/****
        filters:
        - RewritePath=/v1/(?<segment>.*), /$\{segment}
        

person Purushotham CK    schedule 18.06.2021