Κοινή χρήση τεχνολογίας

SpringCloudGateway

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

αποτέλεσμα

  • Ενοποιημένη διαχείριση, εύκολη παρακολούθηση
  • Ασφάλεια, περιορισμός ρεύματος: φιλτράρετε τις παράνομες πληροφορίες στο επίπεδο πύλης
  • Εξωτερική πύλη nginx, ενδοδίκτυο πύλης
  • Το nginx μπορεί να βελτιωθεί με Lua ή Kong

έννοια

  • id: οποιοδήποτε όνομα
  • uri: Η διεύθυνση της υπηρεσίας διακομιστή μεσολάβησης. Το id και το uri απαιτούνται, το κατηγόρημα και το φίλτρο είναι προαιρετικά
  • Κατηγόρημα: μπορεί να χρησιμοποιηθεί για την αντιστοίχιση του uri για την πρόσβαση στην πύλη Εάν ταιριάζει, η τρέχουσα διαδρομή θα τεθεί σε ισχύ.
  • Φίλτρο: Μια παρουσία του GatewayFilter, που προσθέτει λογική πριν ή μετά τον διακομιστή μεσολάβησης, με την υψηλότερη ευελιξία

Ροή επεξεργασίας

  • Πρώτα, το Handler Mapping επεξεργάζεται τη διεύθυνση URL και στη συνέχεια την παραδίδει στο Web Handler. Αφού ολοκληρωθεί η επεξεργασία, καλεί την πραγματική υπηρεσία διακομιστή μεσολάβησης, εκτελεί τη λογική του δεύτερου μισού του φίλτρου Επιστρέψτε το αποτέλεσμα στο WebHandler, μετά στο HandlerMapping και τέλος στον πελάτη

χρήση

gateway:
      discovery:
        locator:
          enabled: true # 启用自动根据服务ID生成路由
          lower-case-service-id: true # 设置路由的路径为小写的服务ID
  • 1
  • 2
  • 3
  • 4
  • 5

διαμόρφωση yml

  • Εάν τα στοιχεία στη λίστα έχουν πολλά πεδία, χρειάζεστε "-" και άνω και κάτω τελεία για να καθορίσετε κάθε πεδίο και τιμή αντίστοιχα, εάν υπάρχει μόνο ένα πεδίο, μπορείτε να χρησιμοποιήσετε κόμματα για να το διαχωρίσετε.
  • Διαμόρφωση τύπου αντικειμένου, κάθε πεδίο μπορεί να διαμορφωθεί μέσω "-" και άνω και κάτω τελείας
  • Τύπος χάρτη: κλειδί, τιμή διαχωρισμένη με άνω και κάτω τελεία
predicates:
  - Path=/sendOrder
  - Query=name,ma.
  - name: Query
    args:
      param: id
      regexp: d+
 #predicates是List, 它的元素是
 public class PredicateDefinition {

	@NotNull
	private String name;

	private Map<String, String> args = new LinkedHashMap<>();
  }
  等号分割转成对象的写法不是yml内置支持的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

κατηγορούμενο

  • Η διαμόρφωση κατηγορήματος είναι μια λίστα, τα στοιχεία της οποίας μπορεί να είναι συμβολοσειρές σε συγκεκριμένη μορφή ή αντικείμενα. Μέθοδος γραφής συμβολοσειράς: διαίρεση με ίσο, το πρώτο μέρος είναι το όνομα του κατηγόρημα, το δεύτερο τμήμα args διαχωρίζεται με κόμμα, η τιμή αποθηκεύεται στην τιμή χάρτη και δημιουργείται αυτόματα το κλειδί χάρτη. Μέθοδος γραφής αντικειμένου: PredicateDefinition
  • Εάν υπάρχουν κόμματα και άνω και κάτω τελείες στα ίδια τα args, η μορφή συμβολοσειράς δεν μπορεί να χρησιμοποιηθεί
  • Η μέθοδος συντόμευσης ορίζει τη μέθοδο ανάλυσης των παραμέτρων args στο DEFAULT: συντόμευσηFieldOrder αφαιρεί το πρόθεμα συντόμευσης και αντιστοιχεί στο όνομα του πεδίου ConfigClass Η τιμή του πεδίου ConfigClass : Λίστα διαχωρισμένη με κόμμα, αλλά η τελευταία Η τιμή είναι μια τιμή Boolean, η οποία τελικά μετατρέπεται σε Χάρτη με 2 κλειδιά Η τιμή του πρώτου κλειδιού είναι η Λίστα μπροστά από την τιμή Boole και το δεύτερο κλειδί είναι το Boolean τιμή.
  • Χρησιμοποιείται για την αντιστοίχιση αιτημάτων πρόσβασης στην πύλη (όπως uri, παραμέτρους ερωτήματος, κεφαλίδες αιτημάτων, εάν ταιριάζουν, η τρέχουσα διαδρομή θα τεθεί σε ισχύ).
  • Αντίστοιχα με την υλοποίηση του GatewayPredicate, η κλάση υλοποίησης δημιουργείται από το εργοστάσιο. Το εργοστάσιο είναι η κλάση υλοποίησης του RoutePredicate.
  • Το όνομα κατηγορήματος αντιστοιχεί στο πρόθεμα ονόματος κλάσης της κλάσης εργοστασιακής υλοποίησης και η παράμετρος κατηγορήματος args αντιστοιχεί στην εργοστασιακή ConfigClass.
  • Πολλαπλές κατηγορηματικές είναικαιΣχέση
  • Όταν το κατηγόρημα δεν περάσει, η πύλη επιστρέφει 404

Μονοπάτι

  • Αντιστοίχιση μονοπατιών, υποστήριξη αντιστοίχισης μυρμηγκιών και εξαγωγή uriVariables μέσω του {}

Ερώτηση

  • Υπάρχει ένα αντίστοιχο όνομα παραμέτρου αίτησης http Η τιμή μπορεί να είναι κανονική;
  • Το όνομα είναι σταθερό Ερώτημα, το args έχει 2 τιμές, param και regexp, που αντιστοιχούν στο όνομα και την τιμή της παραμέτρου ερωτήματος
  • Όταν διαμορφώνεται μόνο το όνομα, σημαίνει ότι όσο υπάρχει η παράμετρος αιτήματος, θα μεταβιβάζεται.

Επί κεφαλής

  • HeaderRoutePredicateFactory
  • Αντιστοίχιση του ονόματος και της τιμής της κεφαλίδας αιτήματος Μπορείτε να αντιστοιχίσετε μόνο το όνομα Η πραγματική τιμή της κεφαλίδας του αιτήματος μπορεί να είναι πολλαπλή.

Μέθοδος

  • Ταιριάζει με τη μέθοδο αιτήματος HTTP, η διαμόρφωση πρέπει να είναι με κεφαλαία γράμματα και να χωρίζεται με κόμματα.

RemoteAddr

  • Η IP πελάτη που αντιστοιχεί στο αίτημα, για την ακρίβεια, η IP του τελευταίου διακομιστή μεσολάβησης δικτύου, μπορεί να είναι πολλαπλή, διαχωρισμένη με κόμματα

Πλήθος

  • Ταιριάζει με την τιμή του τμήματος κεντρικού υπολογιστή στην κεφαλίδα αιτήματος κεντρικού υπολογιστή (εξαιρουμένης της θύρας, μπορεί να είναι πολλαπλή, να χωρίζεται με κόμματα και να αντιστοιχίζεται με μυρμήγκι).
  • Χρησιμοποιήστε το AntPathMatcher για αντιστοίχιση και το διαχωριστικό διαδρομής είναι "."

Κουλουράκι

  • Αντιστοιχίστε το όνομα και την τιμή του cookie Η τιμή μπορεί να αντιστοιχιστεί τακτικά.

Βάρος

  • Χρησιμοποιείται για εξισορρόπηση φορτίου διαφορετικών διαδρομών Οι διαδρομές στην ίδια ομάδα φορτώνονται ανάλογα με το βάρος.
  • Μπορείτε να διαμορφώσετε 2 τιμές, διαχωρισμένες με κόμμα, οι οποίες είναι η ομαδοποίηση και το βάρος.
  • WeightCalculatorWebFilter: Κατά την εκκίνηση, δημιουργείται ένας χάρτης δύο επιπέδων με βάση τη διαμόρφωση του βάρους. Το πρώτο επίπεδο είναι το όνομα της ομάδας και το δεύτερο επίπεδο είναι το αναγνωριστικό δρομολόγησης. και επιλέγεται ένα αναγνωριστικό δρομολόγησης για κάθε ομάδα.
  • WeightRoutePredicateFactory: Όταν φιλτράρετε κατηγόρημα, φιλτράρετε με βάση την ομάδα και το αναγνωριστικό διαδρομής

φίλτρο

  • Η μέθοδος γραφής διαμόρφωσης είναι η ίδια με το κατηγόρημα.
  • Τα φίλτρα χρησιμοποιούνται για την τροποποίηση αιτημάτων και απαντήσεων

AddRequestHeader

  • Προσθέστε κεφαλίδες αιτημάτων, οι οποίες μπορούν να ληφθούν από το backend
  • Η τιμή της κεφαλίδας αιτήματος υποστηρίζει τη δυναμική απόκτηση από το uriVariables

StripPrefix

  • Υπάρχει μόνο μία ακέραια τιμή n Αφού διαιρέσετε τη διαδρομή που ζητήσατε με το "/", αφαιρέστε το πρόθεμα n

Περιορισμός

Cross domain

spring.cloud.gateway.globalcors:
  cors-configurations:
    '[/**]': #跨域的uriPattern
      allowedHeaders: "*"
      allowedOrigins: "*"
      allowedMethods:
        - POST
        - OPTIONS
        - GET
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • Ο διακομιστής καθορίζει εάν πρόκειται για αίτημα μεταξύ τομέων με βάση το εάν η κεφαλίδα αιτήματος Προέλευση και το σχήμα, ο κεντρικός υπολογιστής και η θύρα της διεύθυνσης URL αιτήματος είναι τα ίδια.
  • Πρέπει να υπάρχει μια διαμόρφωση μεταξύ τομέων και το ζητούμενο uri ταιριάζει με το uriPattern της διαμόρφωσης μεταξύ τομέων. πηγές, μέθοδοι αιτήματος και πραγματικές αιτήσεις στη διαμόρφωση μεταξύ τομέων Εάν η κεφαλίδα αιτήματος, η πηγή και η μέθοδος αιτήματος ταιριάζουν, εάν ταιριάζουν, εκτελέστε πρόσβαση μεταξύ τομέων, διαφορετικά επιστρέψτε το 403Forbiden.
  • org.springframework.web.reactive.handler.AbstractHandlerMapping#getHandler
  • org.springframework.web.cors.reactive.DefaultCorsProcessor#process

Αυτόματη δημιουργία διαδρομών

  • Υποστηρίζει τη λήψη αναγνωριστικού υπηρεσίας μέσω ανακάλυψης υπηρεσίας και δημιουργεί αυτόματα διαμόρφωση δρομολόγησης με βάση το αναγνωριστικό υπηρεσίας.Το uri της προεπιλεγμένης διαμόρφωσης δρομολόγησης είναι lb://serviceId, το κατηγόρημα είναι /serviceId/** και το φίλτρο είναι Rewritepath για κατάργηση του serviceId.

παγκόσμιο φίλτρο

ReactiveLoadBalancerClientFilter

  • Για να επεξεργαστείτε το URI δρομολόγησης με σχήμα lb, αποκτήστε πρώτα την παρουσία υπηρεσίας σύμφωνα με το όνομα της υπηρεσίας μέσω του ServiceInstanceListSupplier και, στη συνέχεια, φορτώστε το υπόλοιπο μέσω της παρουσίας ReactorLoadBalancer

RouteToRequestUrlFilter

  • Κάντε 2 πράγματα: 1. Υποστηρίξτε σχήματα 2 επιπέδων, αποθηκεύστε το εξωτερικό σχήμα στο GATEWAY_SCHEME_PREFIX_ATTR και, στη συνέχεια, αφαιρέστε το. 2. Χρησιμοποιήστε το εσωτερικό σχήμα, τον κεντρικό υπολογιστή και τη θύρα για να αντικαταστήσετε το πραγματικό URI που ζητήθηκε για να επιτύχετε την προώθηση.