ลำดับเส้นทางใน 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/** จะจับคู่กับ Route-id-1 เสมอ ในขณะที่ http://gateway-url/v1/** จะจับคู่กับ Route-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