20 Eylül 2021 Pazartesi

SpringCloud Gateway application.properties Ayarları

Giriş
application.properties yerine aynı şeyi kodla yapmak ta mümkün. Kodla yapmak için SpringCloud Gateway RouteLocator Arayüzü yazısına bakabilirsiniz

httpClient
Örnek
Şöyle yaparız
//global timeout for all routes
spring.cloud.gateway.httpclient.response-timeout= 2s

//timeout for one specific route in ms
spring.cloud.gateway.routes[0].metadata.response-timeout=3000

routes.id Alanı
route için tanımlanan tekil id ismidir
Örnek
Şöyle yaparız. Burada iki tane route tanımlanıyor. Her route için uri alanı ile hangi service yönlendirileceği belirtiliyor. Predicate ile de hangi isteklerin route ile eşleşeceği belirtiliyor.
# application.properties file for spring cloud gateway 
spring.application.name=gateway
sever.port=8080

## microservices mapping ##
spring.cloud.gateway.routes[0].id=microservice-one
spring.cloud.gateway.routes[0].uri=http://localhost:8081/
spring.cloud.gateway.routes[0].predicates[0]=Path=/firstmicroservice/**

spring.cloud.gateway.routes[1].id=microservice-two
spring.cloud.gateway.routes[1].uri=http://localhost:8082/
spring.cloud.gateway.routes[1].predicates[0]=Path=/secondmicroservice/

routes.uri Alanı
Çağrıyı yönlendireceğimiz mikroservis'in ismidir.
Örnek
Şöyle yaparız. Burada Path iler car/ altındaki her şey yakalanır. Örneğin "localhost:8080/car/cars" adresini kullanabiliriz. Bu adrese gelen çağrı lb://car sayesinde Eureka'ya "car" ismi ile kayıt olmuş "cars" adresini dinleyen servis'e  gönderilir
server:
  port: 8080

spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: car-service # just an id, should end with -service
          uri: lb://car # the load balancer id (the configured application name)
          predicates:
            - Path=/car/** # the url path
          filters:
            - RewritePath=/car/(?<path>.*), /$\{path}
        - id: hotel-service
          uri: lb://hotel
          predicates:
            - Path=/hotel/**
          filters:
            - RewritePath=/hotel/(?<path>.*), /$\{path}
        - id: trip-service
          uri: lb://trip
          predicates:
            - Path=/trip/**
          filters:
            - RewritePath=/trip/(?<path>.*), /$\{path}
Örnek
Şöyle yaparız. Burada http://localhost:9000/test/foo gibi bir adrese gidersek, Eureka'ya test-service ismiyle kayıt olmuş servisin foo adresini dinleyen servise gönderilir.
spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: test-service
          uri: lb://test-service
          predicates:
            - Path=/test/**
server:
  port: 9000
eureka:
  client:
    registerWithEureka: true
    serviceUrl:
      defaultZone: ${EUREKA_SERVER_ADDRESS}
discovery.locator Alanı
Örnek
Açıklaması şöyle
Unlike Zuul, Spring cloud Gateway doesn't automatically look in Eureka for routing calls. So we enabled it by adding a couple of additional properties.
Şöyle yaparız. Eğer bu ayarları yapmak istemiyorsak, sanırım @EnableDiscoveryClient anotasyonunu kullanmak gerekir
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true
default-filters Alanı
default-filters Alanı yazısına taşıdım

routes.predicates Alanı
Eğer çağrı bu koşula uyuyorsa yönlendirilir. Bir sürü Predicate Factory sınıfı var. Bunlardan birisi de Path
Örnek - Path
Şöyle yaparız
spring:
  cloud:
    gateway:
      default-filters:
        - TokenRelay
      routes:
        - id: product-resource-service
          uri: http://localhost:9191
          predicates:
            - Path=/product/**
Açıklaması şöyle
Here we are setting a route for any path request matching /product will be directed to the resource server (product-service) that is running at localhost at port 9191.

In the default-filters section, we would have to add “TokenRelay”, so that the API Gateway passes the JWT access token to the resource server.
Örnek - Path
Şöyle yaparız. Gateway 8090 potunua dinliyor.  http://127.0.0.1:8090/service1Id/demoApi adresine gelen isteği http://127.0.0.1:8080/service1Id/demoApi adresine yönlendirir.
service.port=8090 //port for apigateway

spring.cloud.gateway.routes[0].id=service1
spring.cloud.gateway.routes[0].uri=http://127.0.0.1:8080/
spring.cloud.gateway.routes[0].predicates=Path=/service1Id/**

Örnek - Path + Header
Eğer Http Header'da Authorizaton olarak Basic password yazıyorsa yönlendirmek için şöyle yaparız
cloud:
gateway:
  routes:
    - id: serviceRoute
      uri: http://service:8000
      predicates:
        - Path=/service/
        - Header=Authorization, Basic password
      filters:
        - name: CircuitBreaker
          args:
            name: slow
            fallbackUri: forward

Hiç yorum yok:

Yorum Gönder