problems_microservice


目录
  • problems_microservice
  • 1 报错1:
  • 2 seata报错2:
  • 3 seata报错4
  • 4 seata报错5
  • 5 seata报错6
  • 6
  • 7
  • 8

problems_microservice

1 报错1:

2021-12-02 13:33:31.529 INFO --- io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator.getAdvicesAndAdvisorsForBean[45]: Auto proxy of [dataSource]
Property 'mapperLocations' was not specified.
2021-12-02 13:33:33.857 ERROR --- io.seata.core.rpc.netty.NettyClientChannelManager.reconnect[164]: Failed to get available servers: endpoint format should like ip:port
java.lang.IllegalArgumentException: endpoint format should like ip:port
RCA:
yaml文件中,没有配置driver-class-name,url,username,password。这些是配置seata数据库的数据源。
solution:配置如下:

spring:
   # 数据源配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://ip:port/seata?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
    username: user1
    password: password1

2 seata报错2:

io.seata.common.exception.FrameworkException: can not register RM,err:can not connect to services-server.
RCA:启动seata-server时,未手动设置端口。
solution:

  1. 服务端和客户端配置服务名称相同。

seata客户端配置file.conf:

service {
  # vgroupMapping.orders_tx_group = "seata-server"
  vgroupMapping.orders_tx_group = "default"
}
  1. 启动seata-server时,手动设置端口,命令为:nohup ./bin/seata-server.sh -p 8091 -h 127.0.0.1 -m db >log.out 2>1 &

3 seata报错4

### Error updating database.  Cause: java.sql.SQLException: java.sql.SQLSyntaxErrorException: Table 'db1.undo_log' doesn't exist

RCA: 在我的数据库db1中没有建立undo_log表。
solution:
建表,语句如下:

CREATE TABLE `undo_log` (
    `branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',
    `xid` varchar(128) NOT NULL COMMENT 'global transaction id',
    `context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` longblob NOT NULL COMMENT 'rollback info',
    `log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created` datetime(6) NOT NULL COMMENT 'create datetime',
    `log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB COMMENT='AT transaction mode undo table';

4 seata报错5

2021-12-02 16:36:31.539 ERROR --- [           main] com.alibaba.druid.pool.DruidDataSource   : init datasource error, url: jdbc:mysql://192.168.1.10:3306/seata?useUnicode=true&rewriteBatchedStatements=true
==> com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

RCA: nacos上配置的store.db.url 错误,

solution:
错误的配置值:jdbc:mysql://错误IP:错误端口/seata?useUnicode=true&rewriteBatchedStatements=true
改为正确的配置值:jdbc:mysql://新IP:新端口/seata?useUnicode=true&rewriteBatchedStatements=true

5 seata报错6

处理分布式事务时,openfeign调用远端接口,远端接口报错:

Caused by: java.sql.SQLException: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Type id handling not implemented for type java.lang.Object (by serializer of type com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer) (through reference chain: io.seata.rm.datasource.undo.BranchUndoLog["sqlUndoLogs"]->java.util.ArrayList[0]->io.seata.rm.datasource.undo.SQLUndoLog["beforeImage"]->io.seata.rm.datasource.sql.struct.TableRecords["rows"]->java.util.ArrayList[0]->io.seata.rm.datasource.sql.struct.Row["fields"]->java.util.ArrayList[2]->io.seata.rm.datasource.sql.struct.Field["value"])

RCA:seata使用jackson反序列化时有bug,还未修复。
solution:将序列化器改为kryo。
修改方法:
在springboot的yaml配置文件中增加配置:
seata: client: undo: logSerialization: kryo

6

7

8