目次
-> パート 1: ポータル: マイクロサービス: Seata AT 分散トランザクションと構成方法 (パート 1)
-> パート II ポータル: マイクロサービス: Seata AT springCloud は構成モードで分散トランザクションを統合します (パート II)
---> 2.1 ソリューション (上位バージョンの mysql 接続を使用)
3. 利用可能なサービス「デフォルト」が見つかりません。レジストリ設定が正しいことを確認してください。
---> 3.1 設定の問題 register.conf を表示する
---> 3.2 バージョンの問題、seata サービスをインストールするにはどのバージョンの XML が必要ですか
4. デフォルトのプールである WebSocketDeploymentInfo にバッファ プールが設定されていませんでした...
5. undo_log データが削除されない解決策の Seata
---> 5.2 Seata-spring-boot-starter (私が使用しているもの) を導入した場合
4.1 詳細については、ポータルのトップ記事を参照してください。
1. 記事ポータル
-> パート 1: ポータル: マイクロサービス: Seata AT 分散トランザクションと構成方法 (パート 1)
-> パート II ポータル: マイクロサービス: Seata AT springCloud は構成モードで分散トランザクションを統合します (パート II)
2. 異常な概要分類:
1. 利用可能なサービス「null」が見つかりません。レジストリ設定が正しいことを確認してください。
2. com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: データベース サーバーへの接続を作成できませんでした。
3. 利用可能なサービス「デフォルト」が見つかりません。レジストリ設定が正しいことを確認してください
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 を解決します。
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