微服务: Seata AT 分布式事务配置出现异常解决(相当全面)(下篇)

目录

1. 文章传送门

-> 上篇传送门: 微服务: Seata AT 分布式事务以及配置方式(上篇)

-> 中篇传送门: 微服务: Seata AT springCloud整合分布式事务以配置方式(中篇)

 2. 异常总结分类: 

3. 解决上述问题:  

-> 解决上述问题一: 

1. no available service 'null' found...

---> 1.2 第一个解决方案:

---> 1.3 第二个解决方案: 

 ---> 1.4 第三个解决方案: (最最主要的)

-> 解决上述问题二: 

2. Could not create connection to database server.

 ---> 2.1 解决方案(使用高版本mysql连接)

-> 解决上述问题三: 

3. no available service 'default' found, please make sure registry config correct

---> 3.1 配置问题 查看register.conf

---> 3.2 版本问题 安装seata服务是什么版本 xml就必须是什么版本

-> 解决上述问题四: 

4. Buffer pool was not set on WebSocketDeploymentInfo, the default pool...

---> 4.1 解决方法一:  

 ---> 4.2 解决方法二: (不推荐)

-> 解决上述问题五: 

5. seata at undo_log数据不删除解决方案 

---> 5.1 如果你引入的是seata-all

---> 5.2 如果你引入的是seata-spring-boot-starter(我用的这种)

 4. 三篇文章总结摘要

4.1 具体请看 最上面 传送门 文章传送查看 


1. 文章传送门

-> 上篇传送门: 微服务: Seata AT 分布式事务以及配置方式(上篇)

-> 中篇传送门: 微服务: Seata AT springCloud整合分布式事务以配置方式(中篇)


 2. 异常总结分类: 

1. no available service 'null' found, please make sure registry config correct

2. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

3no available service 'default' found, please make sure registry config correct

4. Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be.... 

5. seata at undo_log数据不删除解决方案


3. 解决上述问题:  

-> 解决上述问题一: 

1. no available service 'null' found...

 ---> 1.1 查看源码解决问题: 

---> 1.2 第一个解决方案:

service.vgroupMapping 是这个配置 1.0版本后 就变成这个了 源码中获取不到值

---> 1.3 第二个解决方案: 

查看这三个文件 如图 与springCloud代码配置yml完全一致 

 ---> 1.4 第三个解决方案: (最最主要的)

查看nacos配置中心 service.vgroupMapping的分组 必须是SEATA_GROUP 

 

 如果不是这个分组 多少个小时也没用 具体请看 传送门(上篇) 里如何创建

-> 解决上述问题二: 

2. Could not create connection to database server.

 这种说明使用的mysql-connector-java的版本是老版本

查看一下lib文件 打开jdbc 发现 seata中有新版的连接jar

 ---> 2.1 解决方案(使用高版本mysql连接)

 把 com.mysql.jdbc.Driver 改为 =>  com.mysql.cj.jdbc.Driver

-> 解决上述问题三: 

3no available service 'default' found, please make sure registry config correct

服务启动的时候 , NettyClientChannelManager 报的这个异常

上述问题一中 是null 说明没有找到这个配置

而这个 default  说明配置有了 但是拉取不下来配置

---> 3.1 配置问题 查看register.conf

主要查看命名空间, 查看填写的是否正确 最好复制一下, 然后重启seata服务 重试

 

---> 3.2 版本问题 安装seata服务是什么版本 xml就必须是什么版本

比如使用1.3.0版本 xml注入其他版本 很有可能出现这个问题(如图)

 

-> 解决上述问题四: 

4. Buffer pool was not set on WebSocketDeploymentInfo, the default pool...

 io.undertow.websockets.jsr UT026010: Buffer pool was not * set on WebSocketDeploymentInfo, the default pool will be used的警告

---> 4.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 解决方法二: (不推荐)

properties方式  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. seata at undo_log数据不删除解决方案 

使用Seata mybatis-plus 动态数据源组件后undolog无法删除 

 dynamic-datasource-spring-boot-starter 组件内部开启seata后会自动使用DataSourceProxy来包装DataSource,所以需要以下方式来保持兼容

---> 5.1 如果你引入的是seata-all

请不要使用@EnableAutoDataSourceProxy注解.

---> 5.2 如果你引入的是seata-spring-boot-starter(我用的这种)

请关闭自动代理 seata: enable-auto-data-source-proxy: false


 4. 三篇文章总结摘要

seata linux安装  ---> ok 

windows安装 springCloud整合nacos seata at  ---> ok 

使用@GlobalTransactional 测试项目回滚  -> ok

查看undo_log数据是否删除成功 ---> ok

4.1 具体请看 最上面 传送门 文章传送查看 

猜你喜欢

转载自blog.csdn.net/pingzhuyan/article/details/130803591