Aplikacja działa bezpośrednio, ale dostaję 503/404 kiedy używam jej jako gateway

0

Cześć. Czy ktoś może polecić, tudzież ma może własne repo z działającym przykładem Spring gateway?
Od lat pracuję w zamkniętej technologii i chciałem sobie odświeżyć, coś z "normalnego świata" i odpadłem na gatewayu.

Mam serwer Eureki i jeden prosty serwis z endpointem http://localhost:8081/hello gdzie zwracam tylko tekst "Hello"

Service jest widoczny w eurece, ale jak próbóję go wywołać przez gateway to dostaję albo 503, albo 404

server:
  port: 8099
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8091/eureka/
spring:
  cloud:
    gateway:
      routes:
        - id: hello-service
          uri: lb://hello-service
          predicates:
            - Path=/hello-service/**
  application:
    name: gateway-service


Przydałby mi się jakiś tutoral for dummies :)
0

A próbowałeś przykłady bezpośrednio od Springa lub z Baeldung?

https://spring.io/guides/gs/gateway/
https://www.baeldung.com/spring-cloud-gateway

EDIT:
Pierwsze na co bym patrzył to porty - z samego Twojego postu widać 3 różne porty, może gdzieś coś się nie matchuje.

0

Dobra, porządkując, teraz mam taką sytację:
Eureka chodzi na porcie 8090
HelloService Chodzi na porcie 8080:

server:
  port: 8080
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka
spring:
  application:
    name: hello-service

jest widoczny w eurece
Teraz gateway:

server:
  port: 8088
spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      routes:
        - id: first-service
          uri: http://localhost:8080/
          predicates:
            - Path=/hey/**
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka
    

Czy dobrze kumam, że jak strzelę na localhost:8088/hey/hello, to powinienem dostać "Hello From service!"?
Użyłem Springboota 3, może tu jest problem?
Wydaje mi się, że robię wszystko, tak jak w wyżej pokazanych tutorialach a mimo to nie działa

0

Hmm a może kwestia tego, że masz w tym pierwszym

spring:
  application:
    name: hello-service

i teraz w tym drugim, gdzie określasz URI do tego serwisu powyżej, może dodaj tę nazwę do urla? Czyli by było:

  cloud:
    gateway:
      routes:
        - id: first-service
          uri: http://localhost:8080/hello-service/
0

Po kolei:

  1. Jak odpalisz Hello Service to pod jakim adresem jest dostępny? Tj. co musisz wpisać w przeglądarkę, żeby dostać odpowiedź?
  2. Czy coś jest w logach gateway?
0

@wartek01: 1. Hello service jest dostępny pod localhost:8080, tam jest też "/hello" endpoint.
2. Logi są czyste, nic w nich nie ma

jakby co to repo:

https://github.com/bartgora/GatwayService - sorry literówka
https://github.com/bartgora/EurekaService
https://github.com/bartgora/Helloservice

1

Ok, coś się ruszyło.
Zmieniłem:

spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      routes:
        - id: path_route
          uri: https://example.org
          predicates:
            - Path=/hey/**

i jak wszedłem na http://localhost:8088/hey/hello to przekierowało mnie na https://example.org

0

Nie jestem pewien, ale spróbuj wrzucić jako uri url: lb://hello-service

2

Dziękuję wszystkim za pomoc.
W Końcu się udało, zmiana w Gateway:

server:
  port: 8088
spring:
  application:
    name: gateway-service
  cloud:
    gateway:
     discovery:
       locator:
         enabled: true
         lower-case-service-id: true
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8090/eureka

Teraz Gateway używa Eureki, żeby znajdować serwisy po id, dodatkowo jest wymagana ta flaga: lower-case-service-id: true.
Wtedy mogę zrobić tak:
http://localhost:8088/hello-service/hello gdzie localhost:8088 to mój gateway.

Źródło: https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-discoveryclient-route-definition-locator
i tu: https://www.appsdeveloperblog.com/spring-cloud-api-gateway-automatic-mapping-of-routes/

Następny etap, to load balancing i circut breaker

0

Load Balancing działa "z automatu"
Dorzuciłem drugą instancję hello service i raz odpowiada z jednego a drugi raz z drugiego

1 użytkowników online, w tym zalogowanych: 0, gości: 1