マイクロサービス: Seata AT 分散トランザクション構成の例外解決 (非常に包括的) (パート 2)

目次

1. 記事ポータル

-> パート 1: ポータル: マイクロサービス: Seata AT 分散トランザクションと構成方法 (パート 1)

-> パート II ポータル: マイクロサービス: Seata AT springCloud は構成モードで分散トランザクションを統合します (パート II)

 2. 異常な概要分類: 

3. 上記の問題を解決します。  

-> 上記の問題 1 を解決します。 

1. 利用可能なサービス「null」が見つかりません...

---> 1.2 最初の解決策:

---> 1.3 2 番目の解決策: 

 ---> 1.4 3 番目の解決策:(最も重要)

-> 上記の問題 2 を解決します。 

2. データベースサーバーへの接続を作成できませんでした。

 ---> 2.1 ソリューション (上位バージョンの mysql 接続を使用)

-> 上記の問題 3 を解決します。 

3. 利用可能なサービス「デフォルト」が見つかりません。レジストリ設定が正しいことを確認してください。

---> 3.1 設定の問題 register.conf を表示する

---> 3.2 バージョンの問題、seata サービスをインストールするにはどのバージョンの XML が必要ですか

-> 上記の問題 4 を解決します。 

4. デフォルトのプールである WebSocketDeploymentInfo にバッファ プールが設定されていませんでした...

---> 4.1 解決策 1:  

 ---> 4.2 解決策 2: (推奨されません)

-> 上記の問題 5 を解決します。 

5. undo_log データが削除されない解決策の Seata 

---> 5.1 Seata-allを導入した場合

---> 5.2 Seata-spring-boot-starter (私が使用しているもの) を導入した場合

 4. 3つの記事のまとめ

4.1 詳細については、ポータルのトップ記事を参照してください。 


1. 記事ポータル

-> パート 1: ポータル: マイクロサービス: Seata AT 分散トランザクションと構成方法 (パート 1)

-> パート II ポータル: マイクロサービス: Seata AT springCloud は構成モードで分散トランザクションを統合します (パート II)


 2. 異常な概要分類: 

1. 利用可能なサービス「null」が見つかりません。レジストリ設定が正しいことを確認してください。

2. com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: データベース サーバーへの接続を作成できませんでした。

. 利用可能なサービス「デフォルト」が見つかりません。レジストリ設定が正しいことを確認してください

4. バッファー プールが WebSocketDeploymentInfo に設定されていません。デフォルトのプールは次のようになります。 

5. undo_log データが削除されない解決策の Seata


3. 上記の問題を解決します。  

-> 上記の問題 1 を解決します。 

1. 利用可能なサービス「null」が見つかりません...

 ---> 1.1 ソース コードを確認して問題を解決します。 

---> 1.2 最初の解決策:

service.vgroupMapping がバージョン 1.0 以降の設定だとこうなってしまい、ソースコードでは値が取得できません

---> 1.3 2 番目の解決策: 

これら 3 つのファイルを図に示すように表示すると、springCloud コード構成 yml はまったく同じです。 

 ---> 1.4 3 番目の解決策:(最も重要)

nacos 構成センターの service.vgroupMapping のグループ化を表示するには、SEATA_GROUP である必要があります。

 

 このグループじゃないと何時間やってもダメ

-> 上記の問題 2 を解決します。 

2. データベースサーバーへの接続を作成できませんでした。

 この説明で使用されている mysql-connector-java のバージョンは古いバージョンです

lib ファイルをチェックして jdbc を開き、seata に新しいバージョンの接続 jar があることを確認します。

 ---> 2.1 ソリューション (上位バージョンの mysql 接続を使用)

 com.mysql.jdbc.Driver を => com.mysql.cj.jdbc.Driver に変更します。

-> 上記の問題 3 を解決します。 

. 利用可能なサービス「デフォルト」が見つかりません。レジストリ設定が正しいことを確認してください

サービスが開始されると、NettyClientChannelManager がこの例外を報告します。

上記の質問 1 は null で、構成が見つからなかったことを示しています。

このデフォルトは、構成が利用可能であることを示していますが、構成をプルダウンすることはできません。

---> 3.1 設定の問題 register.conf を表示する

主に名前空間を確認し、入力が正しいかどうかを確認します。それをコピーしてから、seata サービスを再起動して再試行するのが最善です。

 

---> 3.2 バージョンの問題、seata サービスをインストールするにはどのバージョンの XML が必要ですか

たとえば、バージョン 1.3.0 xml を使用して他のバージョンを挿入すると、この問題が発生する可能性があります (図を参照)。

 

-> 上記の問題 4 を解決します。 

4. デフォルトのプールである WebSocketDeploymentInfo にバッファ プールが設定されていませんでした...

 io.undertow.websockets.jsr UT026010: バッファー プールが * WebSocketDeploymentInfo に設定されていません。デフォルトのプールが使用されます。

---> 4.1 解決策 1:  

import io.undertow.server.DefaultByteBufferPool;
import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
 
/**
 *
 *
 * 解决方案一: 配置文件
 * 解决方案二: application.properties的配置
 *
 * @author: pzy
 * @date: 2023-05-19
 * @description: 解决启动io.undertow.websockets.jsr UT026010: Buffer pool was not
 * set on WebSocketDeploymentInfo, the default pool will be used的警告
 */
@Component
public class CustomizationBean implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
 
    @Override
    public void customize(UndertowServletWebServerFactory factory) {
        factory.addDeploymentInfoCustomizers(deploymentInfo -> {
            WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo();
            webSocketDeploymentInfo.setBuffers(
                    new DefaultByteBufferPool(false, 1024)
//                    new DefaultByteBufferPool(false, 1024,20,4)
            );
            deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo);
        });
    }
}
 

 ---> 4.2 解決策 2: (推奨されません)

プロパティメソッドymlは自分で変更可能 

##pzy 解决启动io.undertow.websockets.jsr
# UT026010: Buffer pool was not set on WebSocketDeploymentInfo,
# the default pool will be used的警告------------------------------------------------------------------------------------->
server.undertow.threads.io= 4
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
server.undertow.threads.worker= 20
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分
server.undertow.buffer-size= 1024
# 是否分配的直接内存
server.undertow.direct-buffers= true
##----------------------------------------------------------------------------------------->

-> 上記の問題 5 を解決します。 

5. undo_log データが削除されない解決策の Seata 

Seata mybatis-plus 動的データ ソース コンポーネントを使用した後、Undolog を削除できない 

 Dynamic-datasource-spring-boot-starter コンポーネントは、コンポーネント内でシートを開いた後、自動的に DataSourceProxy を使用して DataSource をラップするため、互換性を維持するには次のメソッドが必要です。

---> 5.1 Seata-allを導入した場合

@EnableAutoDataSourceProxy アノテーションは使用しないでください。

---> 5.2 Seata-spring-boot-starter (私が使用しているもの) を導入した場合

自動プロキシをオフにしてくださいa:enable-auto-data-source-proxy:false


 4. 3つの記事のまとめ

Seata Linux のインストール ---> OK 

Windows インストール springCloud 統合 nacos Seata で ---> ok 

@GlobalTransactional でプロジェクトのロールバックをテストします -> OK

undo_log データが正常に削除されたかどうかを確認します ---> ok

4.1 詳細については、ポータルのトップ記事を参照してください。 

おすすめ

転載: blog.csdn.net/pingzhuyan/article/details/130803591