내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
이 기사의 출처는 다음과 같습니다. Apache Seata 공식 문서, 더 자세한 기사를 보려면 공식 웹 사이트를 방문하십시오.
이 기사의 출처는 다음과 같습니다.Apache Seata 공식 문서, 더 자세한 기사를 보려면 공식 웹 사이트를 방문하십시오.
~에 따르면사장정의된 범주 및 구성에는 환경 구성, 설명 구성, 확장 구성의 세 가지 유형이 있습니다.
환경 구성: 일부 구성요소가 시작될 때와 같은 매개변수, 일반적으로 개별 단순 값, 대부분 키-값 데이터입니다.
설명 구성: 일반적으로 비즈니스의 수명주기 관리에 포함된 트랜잭션 개시자 및 참가자와 같은 비즈니스 로직과 관련됩니다. 많은 구성 정보가 설명되어 있으며 계층적 관계도 있습니다.
확장 구성: 제품은 타사 구현을 검색해야 하며 다양한 구성 센터 및 등록 센터와 같은 구성 집계에 대한 요구 사항이 상대적으로 높습니다. 일반적인 방법은 인터페이스 클래스의 전체 이름 파일을 META-INF/services에 배치하는 것입니다. jar 패키지의 내용은 다음과 같습니다. 한 줄에 하나의 구현 클래스 이름입니다.
로드 시 Seata 서버는 resources/registry.conf를 사용하여 구성 센터 및 등록 센터의 유형을 결정합니다. 버전 1.0 이후에는 Seata 클라이언트가 conf 파일을 사용하여 구성을 로드할 수 있을 뿐만 아니라 springboot의 yml 구성 파일에 있는 Seata.config.{type}을 사용하여 구성 센터를 선택할 수도 있습니다. yml을 통해 구성을 로드하기 위한 소스 코드는 io.seata.spring.boot.autoconfigure.properties.registry 패키지에 있습니다.
Seata 클라이언트 사용자가 conf 구성 파일을 리소스 아래에 배치하고 구성을 yml 파일에 배치하면 yml 파일의 구성이 먼저 사용됩니다. 암호:
CURRENT_FILE_INSTANCE = null == extConfiguration ? configuration : extConfiguration;
여기서 extConfiguration은 외부 구성 인스턴스입니다. 즉, ExtConfigurationProvider#provide() 외부 구성 공급자 클래스에서 제공되며 구성은 다른 구성 공급자 클래스 ConfigurationProvider#provide()에서 제공됩니다. 이 두 구성 공급자 클래스는 의 정적 블록에 있습니다. SPI를 통해 로드된 구성 모듈 ConfigurationFactory
EnhancedServiceLoader.load(ExtConfigurationProvider.class).provide(configuration);
위에서 언급한 것은 Configuration Center 유형의 선택이고, Configuration Environment 로딩은 어떤 Configuration Center 유형을 사용할 것인지 결정한 후 해당 Configuration Center를 통해 환경 구성을 로드하는 것입니다. 텍스트 모드의 파일 구성도 구성 센터입니다.
클라이언트와 서버는 ConfigurationFactory#getInstance()를 통해 구성 매개변수를 얻어 구성 클래스 인스턴스를 얻은 다음 구성 클래스 인스턴스를 사용하여 구성 매개변수를 얻습니다. 구성 키 상수의 정의는 주로 코어 모듈 아래의 config 파일에 있습니다.
몇 가지 중요한 환경 구성 속성의 의미는 다음과 같습니다.공식 홈페이지에 소개가 있어요。
인스턴스화 중에 ConfigurationFactory를 통해 얻은 후 생성자에 주입된 항목은 다시 시작해야 적용됩니다. 그러나 사용 중에 실시간으로 ConfigurationFactory를 통해 얻은 항목은 구성이 변경되면 적용됩니다.
그러나 구성 모듈은 인스턴스 내부의 속성을 수정하기 위해 ConfigurationChangeListener#onChangeEvent 인터페이스 메서드를 제공합니다. 즉, 동적으로 변경되는 속성을 모니터링하여 처음 주입을 시작할 때와 사용된 속성이 다른 것으로 감지되면 인스턴스에 저장된 속성을 Configuration Center와 일치하도록 수정한다. 따라서 동적 구성을 달성합니다.
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;
}}
위는 spring 모듈 하위의 GlobalTransactionalInterceptor와 downgraded 속성과 관련된 pseudo 코드이다. GlobalTrarnsactionalScanner는 위의 인터셉터 클래스가 인스턴스화될 때 구성 변경 수신 목록에 인터셉터를 등록합니다. 구성이 변경되면 리스너가 호출됩니다.
ConfigurationFactory.getInstance().addConfigListener(ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION,(ConfigurationChangeListener)interceptor);
다운그레이드란 서비스의 특정 기능을 사용할 수 없을 때 동적으로 구성된 속성을 통해 특정 기능을 꺼서 장애를 처리하려는 반복적인 시도를 방지하는 것을 의미합니다. Interceptor#invoke() 이 비활성화 속성이 true인 경우에만 Seata 트랜잭션 관련 서비스가 실행됩니다.
일반적인 프레임워크 설명 구성은 일반적으로 많은 정보를 포함하고 심지어 계층적 관계도 가지고 있습니다. 트리 구조가 더 설명적이므로 xml 구성을 사용하는 것이 더 편리합니다. 그러나 현재의 습관은 번거롭고 제한적인 구성을 제거하고 합의된 방법을 채택하는 것을 옹호합니다.
Seata AT 모드는 비즈니스 당사자에게 덜 방해가 되는 프록시 데이터 소스를 통해 트랜잭션 처리를 수행합니다. Seata는 시작할 때 글로벌 트랜잭션을 활성화해야 하는 비즈니스 당사자만 식별하면 되므로 주석을 사용하여 설명적인 구성을 달성할 수 있습니다.
@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/services 아래에 인터페이스와 동일한 이름의 텍스트 파일을 배치합니다. 파일의 내용은 인터페이스의 구현 클래스입니다. 이것이 표준 spi 방식입니다. 그런 다음 구성 파일 Registry.conf에서 config.type=test를 수정합니다.
하지만 이것을 시타에서 인식하고 컨피규레이션 센터를 교체하면 된다고 생각한다면 착각이다. Seata는 구성 센터를 로드할 때 enum ConfigType을 사용하여 구성 파일에 구성된 구성 센터 유형의 값을 래핑합니다.
private static Configuration buildConfiguration() {
configTypeName = "test";//registry.conf中配置的config.type
configType = ConfigType.getType(configTypeName);//ConfigType获取不到会抛异常
}
구성 센터 유형 테스트가 ConfigType에 정의되어 있지 않으면 예외가 발생합니다. 따라서 소스 코드를 변경하지 않고 단순히 구성 파일만 수정하는 경우에는 ConfigType에 정의된 구성 센터 제공 클래스 외에 구성 센터 제공 클래스를 사용할 수 없습니다.
버전 1.0의 ConfigType에 정의된 현재 구성 센터 유형은 File, ZK, Nacos, Apollo, Consul, Etcd3, SpringCloudConfig, Custom입니다. 사용자가 사용자 정의된 구성 센터 유형을 사용하려는 경우 사용자 정의 유형을 사용할 수 있습니다.
여기서는 우아하지 않은 방법을 사용할 수 있습니다. 즉, 지정된 이름 ZK와 더 높은 수준의 order=3(ZK 기본 순서=1)을 갖는 구현 클래스를 제공하여 ConfigurationFactory가 TestConfigurationProvider를 구성 센터 공급자 클래스로 사용할 수 있도록 할 수 있습니다.
위의 단계를 통해 Seata가 제공한 코드를 사용하도록 할 수 있습니다. 코덱, 압축기, 검색 및 Seata 통합과 같은 모듈은 모두 spi 메커니즘을 사용하여 기능 클래스를 로드합니다. 이는 마이크로커널 플러그인의 설계 철학과 타사의 평등한 대우에 부합합니다.
저자: 자오룬체(Zhao Runze)시리즈 주소。