Πάροχοι διαμόρφωσης
Φορτώστε διαδρομές και clusters προγραμματιστικά αντί από αρχείο, υλοποιώντας εσείς οι ίδιοι το IProxyConfigProvider - χρήσιμο για μια βάση δεδομένων, ένα απομακρυσμένο API, ή οποιαδήποτε άλλη πηγή.
Η διεπαφή του παρόχου
Τα Αρχεία διαμόρφωσης καλύπτουν τη συνηθισμένη περίπτωση φόρτωσης από IConfiguration. Για να φορτώσετε από οπουδήποτε αλλού, υλοποιήστε εσείς οι ίδιοι τα IProxyConfigProvider και IProxyConfig.
Το IProxyConfigProvider διαθέτει μία μόνο μέθοδο, τη GetConfig(), η οποία επιστρέφει ένα IProxyConfig - ένα στιγμιότυπο (snapshot) με τις τρέχουσες διαδρομές και clusters, μαζί με ένα IChangeToken που ο πάροχος ενεργοποιεί κάθε φορά που αυτό το στιγμιότυπο είναι ξεπερασμένο, γεγονός που κάνει τον διακομιστή μεσολάβησης να καλέσει ξανά τη GetConfig().
Άμεση φόρτωση διαδρομών και clusters
Για την απλούστερη περίπτωση - διαδρομές και clusters γνωστά εξ ολοκλήρου μέσα στον κώδικα - το InMemoryConfigProvider είναι ένα έτοιμο IProxyConfigProvider:
C#services.AddReverseProxy().LoadFromMemory(routes, clusters);Για να αλλάξετε αυτή τη διαμόρφωση αργότερα, ανακτήστε το InMemoryConfigProvider από το container υπηρεσιών και καλέστε τη Update:
C#httpContext.RequestServices.GetRequiredService<InMemoryConfigProvider>()
.Update(routes, clusters);Κύκλος ζωής του παρόχου
Εκκίνηση
Το IProxyConfigProvider καταχωρίζεται ως singleton. Κατά την εκκίνηση, ο διακομιστής μεσολάβησης το ανακτά και καλεί τη GetConfig() μία φορά· ο πάροχος μπορεί να:
- εκτοξεύσει εξαίρεση, αν δεν μπορεί να παράγει έγκυρη διαμόρφωση - αυτό εμποδίζει την εκκίνηση της εφαρμογής·
- αποκλειστεί συγχρόνως μέχρι να φορτωθεί η διαμόρφωση, κάτι που καθυστερεί την εκκίνηση μέχρι να είναι διαθέσιμα έγκυρα δεδομένα διαδρομών· ή
- επιστρέψει αμέσως ένα κενό
IProxyConfigκαι να φορτώσει στο παρασκήνιο, ενεργοποιώντας τοIChangeTokenτου μόλις τα πραγματικά δεδομένα είναι έτοιμα.
Όποια διαμόρφωση κι αν επιστραφεί επικυρώνεται, και ένα μη έγκυρο αποτέλεσμα εκτοξεύει μια εξαίρεση που εμποδίζει την εκκίνηση - ένας πάροχος μπορεί εναλλακτικά να προεπικυρώσει με το IConfigValidator και να αποκλείσει ο ίδιος τις μη έγκυρες καταχωρίσεις.
Τα αντικείμενα διαδρομών και clusters που παραδίδονται στον διακομιστή μεσολάβησης πρέπει να αντιμετωπίζονται ως read-only μόλις επιστραφούν από τη GetConfig().
Επαναφόρτωση
Αν το IChangeToken υποστηρίζει ενεργά callbacks αλλαγής, ο διακομιστής μεσολάβησης καταχωρίζει ένα μετά την αρχική φόρτωση· διαφορετικά, το HasChanged ελέγχεται (polled) κάθε 5 λεπτά. Για να δημοσιεύσει μια νέα διαμόρφωση, ένας πάροχος θα πρέπει να τη φορτώσει στο παρασκήνιο - δημιουργώντας νέα στιγμιότυπα διαδρομών/clusters, αφού είναι αμετάβλητα (immutable), αν και όσα δεν έχουν αλλάξει μπορούν να επαναχρησιμοποιηθούν - να την επικυρώσει προαιρετικά, και μόνο τότε να ενεργοποιήσει το προηγούμενο IChangeToken. Ο διακομιστής μεσολάβησης καλεί ξανά τη GetConfig() ως απάντηση και συγκρίνει το αποτέλεσμα με την τρέχουσα διαμόρφωση, ενημερώνοντας μόνο ό,τι άλλαξε· η εναλλαγή είναι ατομική (atomic) και επηρεάζει μόνο τα νέα αιτήματα, όχι εκείνα που βρίσκονται ήδη σε εξέλιξη.
Τα IChangeToken είναι μιας χρήσης. Αν η GetConfig() εκτοξεύσει εξαίρεση κατά την επαναφόρτωση, ο διακομιστής μεσολάβησης χάνει την ικανότητά του να παρακολουθεί περαιτέρω αλλαγές από αυτόν τον πάροχο. Οποιαδήποτε άλλα σφάλματα επαναφόρτωσης καταγράφονται και καταστέλλονται αντ' αυτού, και ο διακομιστής μεσολάβησης συνεχίζει να χρησιμοποιεί την τελευταία γνωστή έγκυρη διαμόρφωση.
Αν σηματοδοτηθούν πολλές επαναφορτώσεις σε γρήγορη διαδοχή, ο διακομιστής μεσολάβησης ενδέχεται να παραλείψει κάποιες και να φορτώσει ό,τι είναι διαθέσιμο μέχρι τη στιγμή που θα προλάβει - κάθε IProxyConfig είναι ένα πλήρες στιγμιότυπο, όχι ένα diff, οπότε δεν χάνεται τίποτα παραλείποντας ένα ενδιάμεσο.
Πολλαπλοί πάροχοι
Περισσότερα από ένα IProxyConfigProvider μπορούν να καταχωριστούν ως singleton· όλα ανακτώνται και η διαμόρφωσή τους συνδυάζεται, με τον ίδιο τρόπο που μπορούν να συνδυαστούν πολλαπλές ενότητες αρχείου διαμόρφωσης. Μια διαδρομή από έναν πάροχο μπορεί να αναφέρεται σε ένα cluster από έναν άλλο, αλλά μια μεμονωμένη διαδρομή ή cluster δεν μπορεί να συναρμολογηθεί από μερικά δεδομένα διάσπαρτα σε δύο παρόχους.