τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Αυτό το άρθρο προέρχεται από Επίσημη τεκμηρίωση Apache Seata, καλώς ήρθατε να επισκεφτείτε τον επίσημο ιστότοπο για να δείτε περισσότερα σε βάθος άρθρα.
Αυτό το άρθρο προέρχεται απόΕπίσημη τεκμηρίωση Apache Seata, καλώς ήρθατε να επισκεφτείτε τον επίσημο ιστότοπο για να δείτε περισσότερα σε βάθος άρθρα.
σύμφωνα μεΑφεντικόΥπάρχουν τρεις τύποι καθορισμένων κατηγοριών και διαμορφώσεων: διαμόρφωση περιβάλλοντος, διαμόρφωση περιγραφής και εκτεταμένη διαμόρφωση.
Διαμόρφωση περιβάλλοντος: παράμετροι όπως η εκκίνηση ορισμένων στοιχείων, συνήθως διακριτές απλές τιμές, κυρίως δεδομένα κλειδιού-τιμής.
Διαμόρφωση περιγραφής: σχετίζεται με την επιχειρηματική λογική, όπως οι εκκινητές συναλλαγών και οι συμμετέχοντες, που συνήθως ενσωματώνονται στη διαχείριση του κύκλου ζωής της επιχείρησης. Περιγράφονται πολλές πληροφορίες διαμόρφωσης και υπάρχει ακόμη και μια ιεραρχική σχέση.
Εκτεταμένη διαμόρφωση: Το προϊόν πρέπει να ανακαλύψει υλοποιήσεις τρίτων και έχει σχετικά υψηλές απαιτήσεις για τη συγκέντρωση παραμέτρων, όπως διάφορα κέντρα διαμόρφωσης και κέντρα εγγραφής Η συνήθης μέθοδος είναι η τοποθέτηση του αρχείου πλήρους ονόματος της κλάσης διεπαφής στο META-INF/υπηρεσίες του πακέτου jar, με περιεχόμενο ως εξής Ένα όνομα κλάσης υλοποίησης ανά γραμμή.
Κατά τη φόρτωση, ο διακομιστής seata θα χρησιμοποιήσει το resources/registry.conf για να καθορίσει τον τύπο του κέντρου διαμόρφωσης και του κέντρου εγγραφής. Μετά την έκδοση 1.0, ο πελάτης seata μπορεί όχι μόνο να χρησιμοποιήσει το αρχείο conf για να φορτώσει τη διαμόρφωση, αλλά και να χρησιμοποιήσει το seata.config.{type} στο αρχείο διαμόρφωσης yml του springboot για να επιλέξει το κέντρο διαμόρφωσης. Ο πηγαίος κώδικας για τη φόρτωση της διαμόρφωσης μέσω του yml βρίσκεται στο πακέτο io.seata.spring.boot.autoconfigure.properties.registry.
Εάν ο χρήστης του προγράμματος-πελάτη seata τοποθετήσει τόσο το αρχείο διαμόρφωσης conf στους πόρους όσο και τη διαμόρφωση στο αρχείο yml, θα χρησιμοποιηθεί πρώτα η διαμόρφωση στο αρχείο yml. Κώδικας:
CURRENT_FILE_INSTANCE = null == extConfiguration ? configuration : extConfiguration;
Εδώ το extConfiguration είναι ένα παράδειγμα εξωτερικής διαμόρφωσης, δηλαδή παρέχεται από την κλάση παροχής εξωτερικής διαμόρφωσης ExtConfigurationProvider#provide() και η διαμόρφωση παρέχεται από μια άλλη κλάση παρόχου διαμόρφωσης ConfigurationProvider#provide(). η μονάδα διαμόρφωσης ConfigurationFactory , που φορτώθηκε μέσω του SPI.
EnhancedServiceLoader.load(ExtConfigurationProvider.class).provide(configuration);
Αυτό που αναφέρεται παραπάνω είναι η επιλογή του τύπου του κέντρου διαμόρφωσης και η φόρτωση του περιβάλλοντος διαμόρφωσης είναι να φορτωθεί η διαμόρφωση περιβάλλοντος μέσω του αντίστοιχου κέντρου διαμόρφωσης αφού καθοριστεί ποιος τύπος κέντρου διαμόρφωσης θα χρησιμοποιηθεί. Η διαμόρφωση αρχείων σε λειτουργία κειμένου είναι επίσης ένα κέντρο διαμόρφωσης.
Ο πελάτης και ο διακομιστής λαμβάνουν παραμέτρους διαμόρφωσης μέσω του ConfigurationFactory#getInstance() για να λάβουν την παρουσία κλάσης διαμόρφωσης και, στη συνέχεια, χρησιμοποιούν την παρουσία κλάσης διαμόρφωσης για να λάβουν τις παραμέτρους διαμόρφωσης Ο ορισμός των σταθερών κλειδιών διαμόρφωσης βρίσκεται κυρίως στο αρχείο διαμόρφωσης κάτω από τη μονάδα πυρήνα.
Η έννοια ορισμένων σημαντικών ιδιοτήτων διαμόρφωσης περιβάλλοντος,Η επίσημη ιστοσελίδα έχει μια εισαγωγή。
Αυτά που λαμβάνονται μέσω του ConfigurationFactory κατά τη διάρκεια της εγκατάστασης και στη συνέχεια εισάγονται στον κατασκευαστή πρέπει να επανεκκινηθούν για να τεθούν σε ισχύ, ωστόσο, αυτά που λαμβάνονται μέσω του ConfigurationFactory σε πραγματικό χρόνο κατά τη χρήση θα τεθούν σε ισχύ μόλις αλλάξει η διαμόρφωση.
Ωστόσο, η λειτουργική μονάδα διαμόρφωσης παρέχει τη μέθοδο διεπαφής ConfigurationChangeListener#onChangeEvent για την τροποποίηση των ιδιοτήτων εντός της παρουσίας. Δηλαδή, σε αυτήν τη μέθοδο, παρακολουθούνται τα δυναμικά μεταβαλλόμενα χαρακτηριστικά, εάν εντοπιστεί ότι τα χαρακτηριστικά που χρησιμοποιούνται είναι διαφορετικά από αυτά κατά την πρώτη έναρξη της ένεσης, τα χαρακτηριστικά που έχουν αποθηκευτεί στην περίπτωση θα τροποποιηθούν ώστε να είναι συνεπή με το κέντρο διαμόρφωσης. επιτυγχάνοντας έτσι δυναμική διαμόρφωση.
public class GlobalTransactionalInterceptor implements ConfigurationChangeListener {
private volatile boolean disable = ConfigurationFactory.getInstance().getBoolean(ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION,false);
@Override public Object invoke(Param param) {
if(disable){//事务业务处理}
}
@Override public void onChangeEvent(Param param) {
disable = param;
}}
Το παραπάνω είναι ο ψευδοκώδικας που σχετίζεται με το GlobalTransactionalInterceptor κάτω από τη μονάδα ελατηρίου και το υποβαθμισμένο χαρακτηριστικό. Το GlobalTrarnsactionalScanner καταχωρεί τον υποκλοπή στη λίστα ακρόασης αλλαγής διαμόρφωσης όταν η παραπάνω κλάση υποκλοπής είναι εγκατεστημένη όταν αλλάξει η διαμόρφωση, ο ακροατής θα καλείται:
ConfigurationFactory.getInstance().addConfigListener(ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION,(ConfigurationChangeListener)interceptor);
Υποβάθμιση σημαίνει ότι όταν μια συγκεκριμένη λειτουργία της υπηρεσίας δεν είναι διαθέσιμη, μια συγκεκριμένη λειτουργία απενεργοποιείται μέσω δυναμικά διαμορφωμένων χαρακτηριστικών, έτσι ώστε να αποφευχθούν επαναλαμβανόμενες προσπάθειες αντιμετώπισης της αποτυχίας. interceptor#invoke() Μόνο όταν αυτό το χαρακτηριστικό απενεργοποίησης είναι αληθές, οι υπηρεσίες που σχετίζονται με τις συναλλαγές seata θα εκτελούνται.
Η γενική περιγραφική διαμόρφωση πλαισίου έχει συνήθως πολλές πληροφορίες και έχει ακόμη και ιεραρχικές σχέσεις. Είναι πιο βολικό να χρησιμοποιείτε διαμόρφωση xml επειδή η δομή του δέντρου είναι πιο περιγραφική. Ωστόσο, οι τρέχουσες συνήθειες συνηγορούν υπέρ της εξάλειψης δυσκίνητων και περιοριστικών διαμορφώσεων και την υιοθέτηση συμφωνημένων μεθόδων.
Η λειτουργία Seata AT εκτελεί την επεξεργασία των συναλλαγών μέσω διαμεσολάβησης πηγών δεδομένων, η οποία είναι λιγότερο παρεμβατική για τα επιχειρηματικά μέρη.
@GlobalTransactional(timeoutMills = 300000, name = "busi-doBiz")
public String doBiz(String msg) {}
Εάν είναι λειτουργία tcc, οι συμμετέχοντες στη συναλλαγή πρέπει επίσης να χρησιμοποιούν αναγνωριστικά σχολιασμού:
@TwoPhaseBusinessAction(name = "tccActionForSpringTest" , commitMethod = "commit", rollbackMethod = "rollback")
public boolean prepare(BusinessActionContext actionContext, int i);
public boolean commit(BusinessActionContext actionContext);
public boolean rollback(BusinessActionContext actionContext);
Η εκτεταμένη διαμόρφωση συνήθως έχει υψηλότερες απαιτήσεις για τη συγκέντρωση προϊόντων, επειδή το προϊόν πρέπει να ανακαλύψει υλοποιήσεις τρίτων και να τις προσθέσει στο προϊόν.
Αυτό είναι ένα παράδειγμα μιας κλάσης που παρέχεται από ένα προσαρμοσμένο κέντρο διαμόρφωσης Τοποθετήστε ένα αρχείο κειμένου με το ίδιο όνομα με τη διεπαφή στο META-INF/υπηρεσίες. Αυτός είναι ο τυπικός τρόπος spi. Στη συνέχεια, τροποποιήστε το config.type=test στο αρχείο διαμόρφωσης registry.conf.
Αλλά αν νομίζετε ότι αυτό μπορεί να αναγνωριστεί από τη seata και να αντικατασταθεί το κέντρο διαμόρφωσης, κάνετε λάθος. Όταν το seata φορτώνει το κέντρο διαμόρφωσης, χρησιμοποιεί το enum ConfigType για να αναδιπλώσει την τιμή του τύπου κέντρου διαμόρφωσης που έχει διαμορφωθεί στο αρχείο διαμόρφωσης:
private static Configuration buildConfiguration() {
configTypeName = "test";//registry.conf中配置的config.type
configType = ConfigType.getType(configTypeName);//ConfigType获取不到会抛异常
}
Εάν η δοκιμή τύπου κέντρου διαμόρφωσης δεν έχει οριστεί στο ConfigType, θα γίνει μια εξαίρεση. Επομένως, η απλή τροποποίηση του αρχείου διαμόρφωσης χωρίς αλλαγή του πηγαίο κώδικα δεν μπορεί να χρησιμοποιήσει τις παρεχόμενες κλάσεις του κέντρου διαμόρφωσης εκτός από τις παρεχόμενες κλάσεις του κέντρου διαμόρφωσης που ορίζονται στο ConfigType.
Οι τρέχοντες τύποι κέντρων διαμόρφωσης που ορίζονται στο ConfigType στην έκδοση 1.0 είναι: File, ZK, Nacos, Apollo, Consul, Etcd3, SpringCloudConfig, Custom. Εάν ο χρήστης θέλει να χρησιμοποιήσει έναν προσαρμοσμένο τύπο κέντρου διαμόρφωσης, μπορεί να χρησιμοποιήσει τον προσαρμοσμένο τύπο.
Μπορείτε να χρησιμοποιήσετε έναν άκομψο τρόπο εδώ, δηλαδή να παρέχετε μια κλάση υλοποίησης με καθορισμένο όνομα ZK αλλά υψηλότερο επίπεδο σειράς=3 (προεπιλεγμένη σειρά ZK=1), έτσι ώστε το ConfigurationFactory να μπορεί να χρησιμοποιήσει το TestConfigurationProvider ως την κλάση παρόχου κέντρου διαμόρφωσης.
Μέσω των παραπάνω βημάτων, μπορείτε να επιτρέψετε στη seata να χρησιμοποιήσει τον κωδικό που παρέχουμε. Ενότητες όπως ο κωδικοποιητής, ο συμπιεστής, η ανακάλυψη και η ενσωμάτωση στο seata χρησιμοποιούν όλα τον μηχανισμό spi για τη φόρτωση λειτουργικών κλάσεων, κάτι που συνάδει με τη σχεδιαστική φιλοσοφία του πρόσθετου μικροπυρήνα και την ίση μεταχείριση τρίτων.
Συγγραφέας: Zhao Runze,Διεύθυνση σειράς。