2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tämä artikkeli on peräisin Apache Seatan virallinen asiakirja, tervetuloa vierailemaan virallisella verkkosivustolla nähdäksesi yksityiskohtaisempia artikkeleita.
Tämä artikkeli on peräisinApache Seatan virallinen asiakirja, tervetuloa vierailemaan virallisella verkkosivustolla nähdäksesi yksityiskohtaisempia artikkeleita.
mukaanPomoMääriteltyjä luokkia ja määrityksiä on kolmen tyyppisiä: ympäristön määritys, kuvausmääritys ja laajennettu kokoonpano.
Ympäristön konfigurointi: parametrit, kuten joidenkin komponenttien käynnistys, yleensä erilliset yksinkertaiset arvot, enimmäkseen avainarvotiedot.
Kuvauskonfiguraatio: liittyy liiketoimintalogiikkaan, kuten tapahtuman aloittajiin ja osallistujiin, yleensä sulautettuna yrityksen elinkaaren hallintaan. Konfigurointitietoja on kuvattu paljon ja jopa hierarkkinen suhde.
Laajennettu konfigurointi: Tuotteen on löydettävä kolmannen osapuolen toteutukset ja sillä on suhteellisen korkeat vaatimukset konfiguraatioiden yhdistämiselle, kuten erilaisille konfigurointikeskuksille ja rekisteröintikeskuksille. Tavallinen tapa on sijoittaa rajapintaluokan koko nimitiedosto kohtaan META-INF/services jar-paketista, jonka sisältö on seuraava. Yksi toteutusluokan nimi riviä kohden.
Ladattaessa seata-palvelin määrittää konfigurointikeskuksen ja rekisteröintikeskuksen tyypin resurssien/registry.conf-tiedoston avulla. Version 1.0 jälkeen seata-asiakas ei voi käyttää vain conf-tiedostoa konfiguraatioiden lataamiseen, vaan se voi myös käyttää springbootin yml-asetustiedostoa seata.config{type}-tiedostoa konfigurointikeskuksen valitsemiseen. Lähdekoodi määritysten lataamiseen yml:n kautta on io.seata.spring.boot.autoconfigure.properties.registry-paketissa.
Jos seata-asiakkaan käyttäjä asettaa sekä conf-määritystiedoston resurssien alle että konfiguraation yml-tiedostoon, käytetään ensin yml-tiedoston konfiguraatiota. Koodi:
CURRENT_FILE_INSTANCE = null == extConfiguration ? configuration : extConfiguration;
Tässä extConfiguration on ulkoinen konfigurointiinstanssi, toisin sanoen ExtConfigurationProvider#provide()-ulkoisen kokoonpanontarjoajan luokan, ja kokoonpanon tarjoaa toinen kokoonpanontarjoajaluokka ConfigurationProvider#provide(). SPI:n kautta ladattu konfigurointimoduuli ConfigurationFactory.
EnhancedServiceLoader.load(ExtConfigurationProvider.class).provide(configuration);
Yllä mainittu on konfigurointikeskuksen tyypin valinta, ja konfigurointiympäristön lataaminen on ympäristön konfiguraation lataaminen vastaavan konfigurointikeskuksen kautta sen jälkeen, kun on määritetty, mitä konfigurointikeskuksen tyyppiä käytetään. Tiedoston määritys tekstitilassa on myös konfigurointikeskus.
Asiakas ja palvelin hankkivat konfigurointiparametrit ConfigurationFactory#getInstance() -sovelluksella konfigurointiluokan ilmentymän saamiseksi ja käyttävät sitten konfigurointiluokan ilmentymää konfigurointiparametrien hankkimiseen. Konfigurointiavainvakioiden määritelmä on pääasiassa konfiguraatiotiedostossa ydinmoduulin alla.
Joidenkin tärkeiden ympäristön konfigurointiominaisuuksien merkitys,Virallisilla verkkosivuilla on esittely。
ConfigurationFactoryn kautta toteutusvaiheessa saadut ja sitten konstruktoriin lisätyt tiedot on käynnistettävä uudelleen, jotta ne tulevat voimaan ConfigurationFactoryn kautta reaaliajassa käytön aikana, mutta ne voivat tulla voimaan, kun kokoonpanoa muutetaan.
Config-moduuli tarjoaa kuitenkin ConfigurationChangeListener#onChangeEvent-liitäntämenetelmän, jolla voidaan muokata ilmentymän ominaisuuksia. Tämä tarkoittaa, että tässä menetelmässä dynaamisesti muuttuvia attribuutteja valvotaan, jos havaitaan, että käytetyt attribuutit ovat erilaisia kuin lisäyksen alkaessa, ilmentymään tallennettuja attribuutteja muutetaan konfigurointikeskuksen mukaisiksi. Näin saavutetaan dynaaminen konfiguraatio.
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;
}}
Yllä oleva on pseudokoodi, joka liittyy GlobalTransactionalInterceptoriin jousimoduulin ja alennettuun määritteeseen. GlobalTrarnsactionalScanner rekisteröi sieppaajan konfiguraatiomuutosten kuunteluluetteloon, kun yllä oleva sieppaajaluokka instantoidaan Kun kokoonpanoa muutetaan, kuuntelijaa kutsutaan:
ConfigurationFactory.getInstance().addConfigListener(ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION,(ConfigurationChangeListener)interceptor);
Vanheneminen tarkoittaa, että kun palvelun tietty toiminto ei ole käytettävissä, tietty toiminto kytketään pois päältä dynaamisesti määritettyjen attribuuttien avulla, jotta vältetään toistuvat yritykset korjata vika. interceptor#invoke() Vain kun tämä disable-attribuutti on tosi, seta-tapahtumaan liittyvät palvelut suoritetaan.
Yleisessä kehyksen kuvaavassa konfiguraatiossa on yleensä paljon tietoa ja jopa hierarkkisia suhteita. On kätevämpää käyttää xml-konfiguraatiota, koska puurakenne on kuvaavampi. Nykyiset tavat kuitenkin puoltavat hankkien ja rajoittavien kokoonpanojen poistamista ja sovittujen menetelmien käyttöönottoa.
Seata AT -tila suorittaa tapahtumien käsittelyn välityspalvelimen avulla, mikä ei häiritse liiketoimintaa vain, mitkä osapuolet tarvitsevat maailmanlaajuiset tapahtumat käyttöönoton yhteydessä, joten kuvaileva konfigurointi voidaan saavuttaa merkintöjen avulla.
@GlobalTransactional(timeoutMills = 300000, name = "busi-doBiz")
public String doBiz(String msg) {}
Jos se on tcc-tila, tapahtuman osallistujien on käytettävä myös huomautustunnisteita:
@TwoPhaseBusinessAction(name = "tccActionForSpringTest" , commitMethod = "commit", rollbackMethod = "rollback")
public boolean prepare(BusinessActionContext actionContext, int i);
public boolean commit(BusinessActionContext actionContext);
public boolean rollback(BusinessActionContext actionContext);
Laajennetulla kokoonpanolla on yleensä korkeammat vaatimukset tuotteiden yhdistämiselle, koska tuotteen on löydettävä kolmannen osapuolen toteutukset ja lisättävä ne tuotteeseen.
Tämä on esimerkki mukautetun konfigurointikeskuksen tarjoamasta luokasta. Sijoita tekstitiedosto, jolla on sama nimi kuin käyttöliittymä, kohtaan META-INF/services. Tiedoston sisältö on käyttöliittymän toteutusluokka. Tämä on tavallinen spi-tapa. Muokkaa sitten config.type=test asetustiedostossa registry.conf.
Mutta jos luulet, että seata voi tunnistaa tämän ja vaihtaa asetuskeskuksen, olet väärässä. Kun seata lataa määrityskeskuksen, se käyttää enum ConfigTypeä konfigurointitiedostossa määritetyn konfigurointikeskuksen tyypin arvon käärimiseen:
private static Configuration buildConfiguration() {
configTypeName = "test";//registry.conf中配置的config.type
configType = ConfigType.getType(configTypeName);//ConfigType获取不到会抛异常
}
Jos konfigurointikeskuksen tyyppitestiä ei ole määritetty ConfigTypessä, tehdään poikkeus. Siksi pelkkä asetustiedoston muokkaaminen muuttamatta lähdekoodia ei voi käyttää muita määrityskeskuksen toimittamia luokkia kuin ConfigType-määrityksessä määritettyjä määrityskeskuksen tarjoamia luokkia.
Nykyiset ConfigTypessä versiossa 1.0 määritetyt konfigurointikeskustyypit ovat: File, ZK, Nacos, Apollo, Consul, Etcd3, SpringCloudConfig, Custom. Jos käyttäjä haluaa käyttää mukautettua konfigurointikeskuksen tyyppiä, hän voi käyttää mukautettua tyyppiä.
Voit käyttää tässä epäeleganttia tapaa, toisin sanoen antaa toteutusluokka määritetyllä nimellä ZK, mutta korkeamman tason order=3 (ZK oletusjärjestys=1), jotta ConfigurationFactory voi käyttää TestConfigurationProvider-sovellusta määrityskeskuksen toimittajaluokkana.
Yllä olevien vaiheiden avulla voit antaa seatan käyttää antamaamme koodia. Moduulit, kuten koodekki, kompressori, Discovery ja Seata-integraatio, käyttävät spi-mekanismia toiminnallisten luokkien lataamiseen, mikä on linjassa mikroytimen laajennuksen suunnittelufilosofian ja kolmansien osapuolten tasavertaisen kohtelun kanssa.
Kirjailija: Zhao RunzeSarjan osoite。