Маршрутизация по умолчанию для облачного шлюза Spring не работает

Я хочу включить маршрутизацию по умолчанию в моем весеннем облачном шлюзе (без zuul) с помощью идентификаторов служб, зарегистрированных в eureka (имена приложений), но я всегда получал ошибку 404.

В моем чате bootstrap.yml я определил имя приложения

spring:
  application:
    name: chat-service

и в свойствах приложения:

eureka:
  instance:
    preferIpAddress: true
  client:
    healthcheck:
      enabled: true
    serviceUrl:
      defaultZone: http://${EUREKA_HOST:localhost}:${EUREKA_PORT:8761}/eureka/

когда я перехожу на панель управления eureka, я также вижу зарегистрированную мою службу чата и шлюз.

Конфигурация Eureka в приложении шлюза такая же, как и в чате, но у меня также есть это:

spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true

а затем я также попытался добавить явные маршруты, которые тоже не работают, но если у меня включен локатор обнаружения, установленный на true, это не нужно, верно?

  routes:
    - id: chat-service-route
      uri: lb://chat-service
      predicates:
        - Path=** 

Я создал тестовую конечную точку, которую я попытался вызвать непосредственно в службе чата, а также через шлюз. Прямой вызов работает нормально, поэтому проблема будет в маршрутизации.

@RestController
@RequestMapping
public class TestController {

    @GetMapping
    public String test() {
        return "chat-service ready";
    }
}

Что я сделал не так? Я немного в отчаянии. Я использую весеннюю загрузку 2.2.2 и версию облачных зависимостей Hoxton.RELEASE.


person Denis Stephanov    schedule 07.12.2019    source источник
comment
Вы можете объяснить, что означает "не работает"? Какой URL вы пробовали?   -  person spencergibb    schedule 07.12.2019
comment
@spencergibb Мне жаль, что я написал его более аккуратно. У меня всегда возникала ошибка 404 для конечной точки отдыха в службе чата, когда я вызываю ее из шлюза   -  person Denis Stephanov    schedule 07.12.2019
comment
По какому URL-адресу вы звоните на шлюз?   -  person spencergibb    schedule 08.12.2019
comment
Шлюз @spencergibb работает на 8080, поэтому я звоню localhost: 8080 / chat-service   -  person Denis Stephanov    schedule 08.12.2019
comment
И отвечает ли чат-сервис на / chat-service? В противном случае вам нужно переписать путь   -  person spencergibb    schedule 09.12.2019
comment
в журналах называется eureka и выглядит как совпадение с чат-сервисом, также я пробовал вызвать актуатор на / chat-service / actator и вернуть некоторую информацию о порте, на котором работает чат-сервис   -  person Denis Stephanov    schedule 09.12.2019
comment
Не то, о чем я спрашиваю. Работает ли http: // ‹chatservicehost: port› / chat-service?   -  person spencergibb    schedule 11.12.2019
comment
Я немного смущен, у меня нет конечной точки / chat-service в чате. Я попробовал, и нет, у меня 404 .. но когда я пытаюсь получить доступ напрямую без шлюза, это неправильно?   -  person Denis Stephanov    schedule 13.12.2019


Ответы (1)


Попробуйте удалить явные маршруты и добавить свойство ниже в приложение yml. У меня это работает.

spring:
  cloud:
    gateway:
      discovery:
        locator:
          lower-case-service-id: true
person venkat    schedule 25.05.2020