Urutan rute di Spring Cloud Gateway

Kami menerapkan rute secara terprogram menggunakan implementasi RouteDefinitionLocator. Kami memiliki dua layanan yang harus mendaftar pada jalur rute yang sama, dimana salah satunya dimaksudkan sebagai cadangan jika yang lain tidak ada. Rute pilihan dengan jalur tertentu adalah:

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}

Dan yang lebih umum, yang hanya akan menyala jika rute lain ditemukan:

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

Jadi, saat memanggil /yambas/rest/apps/bla/models/ms, rute pertama harus digunakan, dan saat memanggil /yambas/rest/apps/bla/models/otherms/*, rute kedua (fallback ) harus digunakan.

Masalahnya adalah, bahkan atribut order pada rute tampaknya tidak menyelesaikan masalah ini; saat ini kami tidak menemukan kemungkinan untuk mengatur urutan/prioritas rute ini. Apakah ini disengaja?


person Andreas    schedule 06.05.2019    source sumber
comment
Keduanya orde 0 yang artinya acak. Apakah Anda menetapkan pesanan dan itu tidak tercermin? Versi apa yang Anda gunakan?   -  person spencergibb    schedule 06.05.2019
comment
Hai Spencer, saya mencoba menyetel yang pertama ke urutan 50 dan yang kedua ke 0 - kemudian tidak menemukan rute apa pun untuk /yambas/rest/apps/bla/models/ms   -  person Andreas    schedule 06.05.2019


Jawaban (2)


Tampaknya kita menetapkan urutan dengan cara yang salah - menetapkan rute dengan prioritas lebih rendah ke urutan 1 dan yang lebih tinggi ke 0 membuatnya berfungsi.

@spencergibb yang pasti layak untuk disebutkan dalam dokumentasi.

person Andreas    schedule 07.05.2019

Rute yang lebih spesifik akan muncul pertama kali dalam konfigurasi perutean, dan rute umum di akhir.

Misalnya: http://gateway-url/v1/accounts/** selalu cocok dengan rute-id-1 sedangkan http://gateway-url/v1/** cocok dengan rute-id-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